【发布时间】:2022-01-12 14:37:47
【问题描述】:
我目前正在使用 SQLAlchemy ORM 来处理我的数据库操作。现在我有一个需要ON CONFLICT (id) DO UPDATE 的SQL 命令。 on_conflict_do_update() 方法似乎是正确的方法。但是the post here 表示代码必须切换到 SQLAlchemy 核心,并且缺少高级 ORM 功能。我对这种说法感到困惑,因为我认为像下面的演示这样的代码可以在保持 SQLAlchemy ORM 的功能的同时实现我想要的。
class Foo(Base):
...
bar = Column(Integer)
foo = Foo(bar=1)
insert_stmt = insert(Foo).values(bar=foo.bar)
do_update_stmt = insert_stmt.on_conflict_do_update(
set_=dict(
bar=insert_stmt.excluded.bar,
)
)
session.execute(do_update_stmt)
我没有在我的项目中测试过它,因为它需要大量的修改。请问这是否是使用 SQLALchemy ORM 处理ON CONFLICT (id) DO UPDATE 的正确方法?
【问题讨论】:
标签: python sqlalchemy