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
相关产品推荐
相关产品推荐

