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

Python SQLite使用executemany()插入计算值时遇参数类型不支持错误

解决SQLite executemany()的"parameters are of unsupported type"错误

你遇到的问题出在executemany()的参数传递逻辑上,咱们一步步理清楚:

错误根源

在循环里你已经定义了item = [(var1),],这本身是符合executemany()要求的序列的序列(一个包含单个元组的列表)。但调用时你额外给它套了一层括号:(item),这会把原本的列表变成元组里的单个元素,也就是([(var1),],)——这种嵌套结构让SQLite无法正确解析参数类型,自然就抛出了类型不支持的错误。

另外补充个小知识点:这里你每次循环只插入一条记录,其实用execute()会更贴合场景,executemany()本来是为批量插入多条数据设计的。

解决方案1:改用execute()(推荐)

把循环部分的代码改成这样,直接传递单个元组作为参数:

for row in c.execute(sql):
    var1 = row[1]*2
    # 用execute处理单条插入,参数传(var1,)这个元组
    c.execute('INSERT INTO nutrition_consumed VALUES (?)', (var1,))

解决方案2:如果坚持用executemany()

保持item的定义,直接把它传给executemany(),去掉多余的括号包裹:

for row in c.execute(sql):
    var1 = row[1]*2
    item = [(var1),]
    # 直接传入item这个符合要求的列表
    c.executemany('INSERT INTO nutrition_consumed VALUES (?)', item)

额外优化建议

  1. 给nutrition_consumed表的字段指定数据类型会更规范,毕竟你存的是计算后的浮点数:
c.execute('''CREATE TABLE IF NOT EXISTS nutrition_consumed (var1 REAL)''')
  1. 可以用SQL语句直接完成计算+插入,省去Python循环,效率更高:
INSERT INTO nutrition_consumed (var1)
SELECT nv.calories * 2
FROM nutritional_values nv 
INNER JOIN food_consumption fc ON nv.item = fc.item

直接执行这条SQL,就能替代原来的循环插入逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:22:16