带有多个记录的Python SQLAlchemy重复键更新

时间:2019-12-11 17:49:29

标签: 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)

在查看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)

但是出现.on_duplicate_key_update()要求不能为空或SQL语法错误的问题。

如果有人成功地进行了管理,可以在这里帮助我解决代码结构,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

我只是遇到了一个类似的问题,然后用query创建了一个字典。插入后为我解决了这个问题。

query = insert(table).values(record_list)
update_dict = {x.name: x for x in insert_stmt.inserted}
upsert_query = query.on_duplicate_key_update(update_dict)

答案 1 :(得分:0)

您的on_duplicate_key_update函数需要用于定义要在更新中插入的数据的参数。请看一下您已经找到的文档中的示例。

insert().on_duplicate_key_update({"key": "value"})