sqlalchemy使用on_duplicate_key_update在尝试插入重复键的数据时更新记录
在SQLAlchemy
中,在尝试插入重复键的数据时更新记录,可以使用on_duplicate_key_update
方法。这个方法是在SQLAlchemy 1.4
版本中引入的,它允许你定义在发生键重复时,哪些列应该被更新。
以下是一个使用on_duplicate_key_update
的例子:
from sqlalchemy import create_engine, Table, MetaData, Column, Integer, String
from sqlalchemy.dialects.mysql import insert# 假设我们有一个名为 'users' 的表,它有两列:'id' 和 'name'
engine = create_engine('mysql+pymysql://user:password@localhost/dbname')
metadata = MetaData()
users = Table('users', metadata,Column('id', Integer, primary_key=True),Column('name', String(50)))# 创建一个插入请求
stmt = insert(users).values(id=1, name='John Doe')# 如果 'id' 已存在,则更新 'name' 列
stmt = stmt.on_duplicate_key_update(name='John Doe')with engine.connect() as connection:connection.execute(stmt)
在这个例子中,如果users
表中已经有一个id
值为1
的记录,尝试插入新的记录时会导致键重复错误。使用on_duplicate_key_update
方法后,如果发生键重复,则只会更新name
列为'John Doe'
。
数据模型类使用on_duplicate_key_update
stmt = Insert(数据模型类).values(newData).on_duplicate_key_update(字段名称=newData[0].get("xxx"),updateDt=datetime.datetime.now())
with engine.connect() as connection:connection.execute(stmt)