Python操作SQLite向REAL字段插入float值报参数类型错误如何解决?
问题根因
你的代码有两个核心错误导致报错:
- 占位符使用错误:
?作为SQL参数占位符时不需要加任何引号包裹,加引号会被SQLite识别为普通字符串常量,失去占位符作用 - 参数类型错误:
execute方法的第二个参数要求传入序列/映射类型,你写的(new)不会被Python识别为元组,只是普通的括号包裹的float变量,需要添加逗号写成(new,)才是符合要求的单元素元组
另外你代码里的str(new)没有任何作用,你没有把转换后的字符串赋值给new变量,原变量还是float类型,属于无效代码。
修复方案
只需要修改execute对应的行即可:
# 错误写法 c.execute("UPDATE money_tracker SET invested_money = '?'", (new)) # 正确写法 c.execute("UPDATE money_tracker SET invested_money = ?", (new,))
完整修正后的函数参考:
def investement_update(a): conn = sqlite3.connect('trades.db') c = conn.cursor() # 建议只查询需要的字段,避免后续表结构变动引发异常 c.execute("SELECT invested_money FROM money_tracker LIMIT 1") old = c.fetchone()[0] new = old + a # 不需要手动转类型,SQLite会自动适配float类型 c.execute("UPDATE money_tracker SET invested_money = ?", (new,)) conn.commit() conn.close()
内容的提问来源于stack exchange,提问作者Samuel Bemis
相关产品推荐
相关产品推荐

