sqlalchemy bulk_save_objects 方法批量插入时,指定属性更新已存在属性
时间: 2023-05-23 19:05:24 浏览: 549
A:在使用 bulk_save_objects 方法批量插入数据时,如果你的数据中存在已存在的数据,你可以通过指定 update_on_duplicate 参数来更新已存在的数据。具体来说,你可以在定义 SQLAlchemy 模型时,在相应字段上添加 unique=True 和 index=True 来保证数据唯一性,并在 bulk_save_objects 方法调用时,传递 update_on_duplicate=True 参数来进行更新操作。示例代码如下:
```
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('mysql+pymysql://username:password@host/database')
Session = sessionmaker(bind=engine)
Base = declarative_base()
class Demo(Base):
__tablename__ = 'demo'
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True, index=True)
value = Column(Integer)
data = [{'name': 'A', 'value': 1},
{'name': 'B', 'value': 2},
{'name': 'C', 'value': 3},
{'name': 'D', 'value': 4},
{'name': 'E', 'value': 5},
{'name': 'A', 'value': 6}, # 重复数据,将更新 value 属性
{'name': 'B', 'value': 7}, # 重复数据,将更新 value 属性
]
session = Session()
session.bulk_save_objects([Demo(**d) for d in data], update_on_duplicate=True)
session.commit()
```
以上示例中,我们定义了一个名为 Demo 的 SQLAlchemy 模型,并在 name 字段上添加了 unique=True 和 index=True,以保证 name 字段的
阅读全文