You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord bot使用sqlite3查询数据库匹配条目时无打印输出问题

问题原因及修复方案

核心错误

你代码运行到cur.execute行就直接抛出异常中断了,根本没有走到后续的if/else分支,所以两个print都不会执行,问题出在两个地方:

  • sqlite3.Cursor.execute的第二个参数要求传入序列类型(元组/列表等),你直接传入int类型的user_id,sqlite3会尝试将整数作为可迭代对象解析,直接触发类型错误,你没有捕获异常所以看不到报错,只看到没有输出。
  • 建表语句中的非空约束写法错误,NOT_NULL是无效写法,SQLite标准非空约束为NOT NULL(中间为空格),虽然部分版本会兼容,但会导致非空校验不生效的潜在问题。

修复代码

1. 修正查询语句的参数传递

将check_db_entry中的查询行改为单元素元组格式,注意参数末尾的逗号不可省略,否则不会被识别为元组:

# 错误写法
# cur.execute('SELECT id FROM user WHERE id=?', user_id)
# 正确写法
cur.execute('SELECT id FROM user WHERE id=?', (user_id,))

额外提示:查询操作不需要调用con.commit(),该方法仅用于增删改等修改数据的操作,你可以删除这行冗余代码。

2. 修正建表语句的约束写法

# 错误写法
# cur.execute('CREATE TABLE IF NOT EXISTS user (id INTEGER NOT_NULL, balance REAL NOT_NULL, text1 TEXT NOT_NULL, text2 TEXT NOT_NULL)')
# 正确写法
cur.execute('CREATE TABLE IF NOT EXISTS user (id INTEGER NOT NULL, balance REAL NOT NULL, text1 TEXT NOT NULL, text2 TEXT NOT NULL)')

排查建议

如果修改后仍有异常,可以在调用check_db_entry的位置增加异常捕获,打印具体报错信息方便定位:

try:
    check_db_entry()
except Exception as e:
    print(f"运行错误:{repr(e)}")

内容的提问来源于stack exchange,提问作者CodeIsLaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:36:04