如何使用Python统计SQLite数据表中的特定值数量?
在Python中用SQLite的COUNT()函数统计特定值数量
嘿,这事儿其实没那么复杂!纯SQLite里的COUNT()用法在Python里几乎可以直接照搬,只需要结合Python自带的sqlite3库来执行查询就行。我给你一步步拆解,再配上学生性别统计的例子,一看就懂。
核心思路
本质就是用SQL的COUNT(*)配合WHERE子句过滤你要统计的特定值,然后通过Python的sqlite3库执行这条SQL语句,最后提取返回的统计结果。
完整代码示例(统计单一性别人数)
假设你有个叫students的表,里面有gender字段(值为'男'或'女'),我们来统计男生的人数:
import sqlite3 # 连接数据库(如果是本地文件数据库,把':memory:'换成你的数据库路径,比如'students.db') with sqlite3.connect(':memory:') as conn: # 创建游标对象 cursor = conn.cursor() # 模拟创建学生表并插入测试数据(实际场景中这步可跳过,你的表已存在) cursor.execute('''CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT, gender TEXT)''') cursor.executemany('''INSERT INTO students (name, gender) VALUES (?, ?)''', [('张三', '男'), ('李四', '女'), ('王五', '男'), ('赵六', '男'), ('钱七', '女')]) conn.commit() # 统计男生人数 cursor.execute("SELECT COUNT(*) FROM students WHERE gender = '男'") male_count = cursor.fetchone()[0] # fetchone()返回元组,取第一个元素就是统计数 print(f"男生人数:{male_count}") # 统计女生人数同理 cursor.execute("SELECT COUNT(*) FROM students WHERE gender = '女'") female_count = cursor.fetchone()[0] print(f"女生人数:{female_count}")
更安全的参数化查询
如果你的统计条件是动态传入的(比如从用户输入获取性别),绝对不要直接拼接SQL字符串,要用参数化查询避免SQL注入风险:
target_gender = '男' # 这个值可以是动态获取的 cursor.execute("SELECT COUNT(*) FROM students WHERE gender = ?", (target_gender,)) count = cursor.fetchone()[0] print(f"{target_gender}生人数:{count}")
一次性统计多个分组(男女生同时统计)
如果想一次拿到所有性别的统计结果,可以用GROUP BY语句批量分组统计:
cursor.execute("SELECT gender, COUNT(*) FROM students GROUP BY gender") results = cursor.fetchall() for gender, count in results: print(f"{gender}生人数:{count}")
几个关键注意点
- 用
with语句管理数据库连接,它会自动帮你关闭连接,避免资源泄漏 COUNT(*)会统计符合条件的所有行,不管字段是否为NULL;如果要统计非NULL的特定字段,可以用COUNT(gender)fetchone()用于获取单个结果,fetchall()用于获取多个分组的结果行
内容的提问来源于stack exchange,提问作者Adam Azam
相关产品推荐
相关产品推荐

