python - 重复键更新上的 SQLAlchemy MySQL
问题描述
我正在尝试使用 SQLALchemy MySQL ON_DUPLICATE_KEY_UPDATE() 函数,但它没有按预期工作。
from sqlalchemy.dialects.mysql.dml import Insert
new_record={'id': 'val1', 'col1': 'new val'}
# Here id is the primary key
# my_table is a Table object
Insert(my_table).on_duplicate_key_update(new_record)
此代码可以正常工作而不会引发错误,但是表中具有主键值的现有记录'val1'
没有被更新。
我查看了有关重复键更新的SQLAlchemy 文档,但我无法理解如何调用该函数。
解决方案
首先要注意的是,您只创建并丢弃了一个插入语句对象。为了执行它,您必须将它传递给execute()
SQLAlchemy 的方法之一。该语句也缺少首先尝试和插入的值。
from sqlalchemy.dialects.mysql.dml import Insert
new_record = {'id': 'val1', 'col1': 'new val'}
# Here id is the primary key
# my_table is a Table object
stmt = Insert(my_table).values(new_record)
stmt = stmt.on_duplicate_key_update(col1=stmt.inserted.col1)
# This will actually execute the statement
engine.execute(stmt)