【发布时间】:2014-11-15 07:18:48
【问题描述】:
我正在尝试使用 SQLAlchemy 模块(不在 SQL 中!)在 python 中编写批量 upsert。
我在 SQLAlchemy 添加时收到以下错误:
sqlalchemy.exc.IntegrityError: (IntegrityError) duplicate key value violates unique constraint "posts_pkey"
DETAIL: Key (id)=(TEST1234) already exists.
我有一个名为posts 的表,主键位于id 列。
在这个例子中,我已经在数据库中有一行id=TEST1234。当我尝试将id 设置为TEST1234 的新帖子对象db.session.add() 时,出现上述错误。我的印象是,如果主键已经存在,记录就会更新。
如何仅基于主键使用 Flask-SQLAlchemy 进行 upsert?有简单的解决方案吗?
如果没有,我总是可以检查并删除任何具有匹配 id 的记录,然后插入新记录,但这对于我的情况来说似乎很昂贵,我不希望有很多更新。
【问题讨论】:
-
如果原始问题没有提到 SQLAlchemy,那怎么重复?
-
你能考虑接受exhuma's answer吗?它利用了 PosgreSQL 的
INSERT … ON CONFLICT DO UPDATE功能并且效果很好。
标签: python postgresql sqlalchemy flask-sqlalchemy