Peewee使用insert_many批量插入时报Missing value错误的排查解决
错误原因
你调用insert_many时给已经是字典列表结构的data额外套了一层列表括号,是该问题的核心诱因:
- 错误写法:
.insert_many([data]) - 正确写法:
.insert_many(data)
data本身已经符合insert_many要求的「字典/元组组成的列表」格式,额外加一层括号后实际传入的是嵌套列表[[{...}, {...}]]。peewee解析时会把整个内层data列表当成单条插入数据,自然匹配不到字段对应的值,就抛出了字段缺失报错。
其他需要修正的点
你代码中on_conflict部分的参数也存在错误:
conflict_target需要和表的唯一索引对应,你表的唯一索引是symbol_id,需要检查字段名是否匹配update参数不能直接传入data,需要指定冲突时要更新的字段,参考写法如下:
from peewee import EXCLUDED # 省略前面构造data的代码 insert_query = (c_db.Tickers .insert_many(data) .on_conflict( conflict_target = [c_db.Tickers.symbol], update = { "weighted_average_price": EXCLUDED.weighted_average_price, "total_traded_base_asset_volume": EXCLUDED.total_traded_base_asset_volume, "total_traded_quote_asset_volume": EXCLUDED.total_traded_quote_asset_volume } ) .execute() )
其中EXCLUDED指代冲突时原本要插入的新数据行。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

