我对peewee insert_many on_conflict查询的行为感到困惑。虽然我认为我已经指定保留'created_at'列并在冲突时更新'updated_at'列,但实际情况正好相反。
查看数据库时,'created_at'比'updated_at'新。我查看了on_conflict的文档。方言是SQLite。此查询有什么问题?
query = (
CA.insert_many(data)
.on_conflict(
conflict_target=[CA.loc_id,],
preserve=(
CA.score,
CA.tags,
CA.process_at,
CA.created_at,
CA.deleted_at,
)
)
).execute()
编辑
根据@coleifer的回答(谢谢你的快速回复),我误解了“保留”的意思,以为它是指保留数据库中的列,而不是传入的数据。
为了限定我最初的问题,我们的目标是定义保持不变的列,特别是当数据库中保持不变的列很少而列很多时。EXCLUDED似乎允许这样做?我希望我有更多的例子。
1条答案
按热度按时间50few1ms1#
您不希望对
created_at
执行preserve
操作(这将保留您要插入的新值)。Preserve表示“使用我们要插入的值”。因此,您只需要
preserve
您希望更新的字段: