我想在使用SQLAlchemy模块(不是SQL!)的python中编写批量upsert。SQLAlchemy - 在postgresql中执行批量upsert(如果存在,更新,否则插入)
我得到一个SQLAlchemy的下面的错误添加:
sqlalchemy.exc.IntegrityError: (IntegrityError) duplicate key value violates unique constraint "posts_pkey"
DETAIL: Key (id)=(TEST1234) already exists.
我有一个表叫posts
与上id
列主键。
在这个例子中,我已经在db中有一行id=TEST1234
。当我试图db.session.add()
一个新的帖子对象与id
设置为TEST1234
,我得到上述错误。我的印象是,如果主键已经存在,记录会被更新。
如何根据主键单独添加Flask-SQLAlchemy?有一个简单的解决方案吗?
如果没有,我总是可以检查并删除任何带有匹配ID的记录,然后插入新记录,但这对我的情况来说似乎很昂贵,我不希望有很多更新。
有一个在SQLAlchemy中没有更新插入操作,这是一般人很难即使在SQLAlchemy之外也能正确执行。显示你正在做什么来得到这个错误。 – davidism 2014-09-22 01:01:02
@davidism合并操作就像一个upsert – mgoldwasser 2014-09-24 14:04:46
* SQLAlchemy的'merge'不是upsert *,[upserts很难](http://lucumr.pocoo.org/2014/2/16/a-case-for -upserts /)。 merge并不是线程安全的,全部都是用Python完成的,而不是数据库。 – davidism 2014-09-24 14:45:34