Python SQLAlchemy ON DUPLICATE KEY UPDATE 具有多条记录

kow*_*pow 0 python mysql sqlalchemy

我想使用 SQLAlchemy 提供的 ON DUPLICATE KEY UPDATE 选项来更新插入一堆记录。

这些记录已使用以下命令成功插入Python(其中connection是engine.connect()对象,table是Table对象)

record_list = [{'col1': 'name1', 'col2': '2015-01-31', 'col3': 27.2},
               {'col1': 'name1', 'col2': '2016-01-31', 'col3': 25.2}]
query = insert(table)
results = connection.execute(query, record_list)
Run Code Online (Sandbox Code Playgroud)

查看https://docs.sqlalchemy.org/en/13/dialects/mysql.html#insert-on-duplicate-key-update-upsert上的文档以及许多 SO 问题(包括可能的建议在SQLAlchemy ON DUPLICATE KEY UPDATE的评论下)我尝试了许多不同的示例,但没有一个我可以看到使用此方法通过 upsert 语句处理多个记录。

我正在尝试沿着

query = insert(table).values(record_list)
upsert_query = query.on_duplicate_key_update()
results = connection.execute(upsert_query)
Run Code Online (Sandbox Code Playgroud)

但要么遇到 .on_duplicate_key_update() 要求不能为空的问题,要么 SQL 语法错误。

如果有人成功管理并可以帮助我处理这里的代码结构,我将非常感激。

小智 9

我刚刚遇到了类似的问题,并通过 query.inserted 创建字典为我解决了这个问题。

query = insert(table).values(record_list)
update_dict = {x.name: x for x in query.inserted}
upsert_query = query.on_duplicate_key_update(update_dict)
Run Code Online (Sandbox Code Playgroud)