使用aiogram2+sqlite3开发Telegram机器人:用户统计数显示为0
解决Telegram机器人用户统计显示0的问题
核心问题及修复步骤
1. 未执行统计函数调用
在stats异步函数中,你只是引用了函数对象,没有触发执行,导致获取的不是统计结果:
# 错误写法 people = db.count_people # 正确写法 people = db.count_people()
2. SQL语句参数错误
你的SQL查询中存在两个问题:
COUNT('user_id')里的单引号会把user_id识别为字符串常量,而非列名- 表名
'users'用单引号包裹,SQLite会将其视为字符串而非表名
修正后的SQL语句:
SELECT COUNT(user_id) FROM users
如果列名/表名包含特殊字符,可改用反引号包裹:
SELECT COUNT(`user_id`) FROM `users`
3. 完善统计函数的返回逻辑
补充默认返回0的逻辑,避免表为空时返回None:
def count_people(self): with self.connection: result = self.cursor.execute("SELECT COUNT(user_id) FROM users").fetchone() return result[0] if result else 0
额外验证点
- 手动执行
SELECT * FROM users;确认表中存在用户数据 - 检查数据库连接对象
db.connection是否指向正确的数据库文件 - 验证用户注册逻辑,确保新用户数据正常写入
users表
内容的提问来源于stack exchange,提问作者No Name
相关产品推荐
相关产品推荐

