python - 如何在 on_conflict_do_update 期间增加列值?

标签 python python-3.x postgresql sqlalchemy upsert

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

我想我必须使用: on_conflict_do_update() 但是我找不到应该为索引/约束和 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)

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

关于python - 如何在 on_conflict_do_update 期间增加列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55795687/

相关文章:

python - 下载 bzr 分支时权限被拒绝(公钥)

python - 为什么 `dataclasses.asdict(obj)` > 10x 比 `obj.__dict__()` 慢

python - 表有多个主键 Django

python - 如何从 groupBox 更改子 QLabel 小部件的字体大小

python - PyQt(Python 和 QT)如何检测何时选择/突出显示 Tableview 中的项目?

Python:在文本文件中搜索字符串并显示匹配的行

python - list append 替换之前附加的值

sql - 在连接字段的非重叠前缀时是否可以避免嵌套循环连接?

postgresql - 获取将被级联截断的表列表

sql - 选择具有特定属性的分组行