我想插入一行,如果它不会破坏product_id和date列中的唯一值(不作为唯一约束添加),如果它确实如此,我只想增加现有行中的列值。
我想我必须使用:on_conflict_do_update()
但我无法找出我应该为index / constraint和set_arguments键入什么。
你们能指点我的方向吗? :)
模型:
class MyModel(db.Model):
__tablename__ = 'my_model'
id = Column(Integer, primary_key=True)
date = Column(Date)
product_id = Column(Integer, ForeignKey('product.id'))
counter = Column(Integer)
提前致谢!
这对我有用,使用Postgresql:
from sqlalchemy.dialects.postgresql import insert
class my_table(Base):
__tablename__ = 'foo'
id = Column(Integer, primary_key=True)
counter = Column(Integer)
insert_stmt = insert(my_table).\
values(id=42).\
on_conflict_do_update(index_elements=[my_table.id],
set_=dict(counter=my_table.counter+1)).\
returning(my_table.id)
results = session.execute(insert_stmt)
根据here的文档,你可以尝试一下:
from sqlalchemy.dialects.mysql import insert
insert_stmt = insert(my_table). \
values(id='some_id', data='some data to insert')
on_conflict_stmt = insert_stmt.on_duplicate_key_update(
data=insert_stmt.inserted.data,
status='U'
)
conn.execute(on_conflict_stmt)