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

Python开发Discord Bot时SQLite占位符语法错误求助

解决SQLite INSERT语句的语法错误问题

嘿,这问题我熟!你遇到的sqlite3.OperationalError: near "?": syntax error是因为你的INSERT语句漏掉了VALUES关键字,这是SQL语法里的必填部分哦。

你现在写的语句是:

INSERT INTO items (?,?,?,?,?,?)

但SQLite要求的正确格式是INSERT INTO table_name VALUES (占位符),或者更规范的INSERT INTO table_name (列名1, 列名2...) VALUES (占位符1, 占位符2...)。

修正后的代码

把你的执行语句改成下面这样就可以正常运行了:

conn = create_connection(db_file)
with conn:
    cur = conn.cursor()
    item = (itemname, price, info_text, buy_text, use_text, role,)
    market = (itemname, stock,)
    # 推荐写法:明确指定列名,避免表结构变化时出错
    cur.execute("INSERT INTO items (itemname, price, info_text, buy_text, use_text, role) VALUES (?,?,?,?,?,?)", item)
    cur.execute("INSERT INTO market (itemname, stock) VALUES (?,?)", market)
    # 如果你的参数顺序和表的字段顺序完全一致,也可以简化成:
    # cur.execute("INSERT INTO items VALUES (?,?,?,?,?,?)", item)
    # cur.execute("INSERT INTO market VALUES (?,?)", market)

额外小贴士

  • 明确写出列名的写法更健壮:如果以后你调整了表的字段顺序(比如新增一个字段),指定列名的代码不会因为参数顺序不匹配而出错。
  • 你已经把参数转换成了正确的string/int类型,这部分没问题,继续保持就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:23:55