如何在 on_conflict_do_update 期间增加列值?

How to increment column value during on_conflict_do_update?

如果它不破坏跨 product_id 和日期列的唯一值(未添加为唯一约束),我想插入一行,如果是,我只想增加列值现有行。

我想我必须使用: 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)

提前致谢!

根据此处的文档 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)

这对我有用,使用 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)

https://docs.sqlalchemy.org/en/13/dialects/postgresql.html?highlight=conflict#sqlalchemy.dialects.postgresql.dml.Insert.on_conflict_do_nothing