首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bulk insert sqlalchemy core with on conflict update

bulk insert sqlalchemy core with on conflict update
EN

Stack Overflow用户
提问于 2021-03-18 10:20:00
回答 1查看 280关注 0票数 2

我想在一个表中插入多个项目,并在发生冲突时重新插入该表。这就是我想出的如下方法

代码语言:javascript
运行
复制
from sqlalchemy.dialects.postgresql import insert
meta = MetaData()
jobs_table = Table('jobs', meta, autoload=True, autoload_with=engine)
stmt = insert(jobs_table).values(jobs)
stmt.on_conflict_do_update(
    index_elements=['j_id'],
    set_= dict(active=True)
)
result = engine.execute(stmt)
return result.is_insert

j_id是一个唯一的字段,如果该行已经存在,我会尝试更新它。如果该行已经存在,我会得到以下错误。

代码语言:javascript
运行
复制
(psycopg2.IntegrityError) duplicate key value violates unique constraint "j_id"
DETAIL:  Key (j_id)=(0ea445da-bd1d-5571-9906-0694fa85728a) already exists.

我是不是漏掉了什么?

EN

回答 1

Stack Overflow用户

发布于 2021-03-29 15:24:55

stmt.on_conflict_do_update返回一个新语句。如果您更改为以下内容,则它应该可以工作:

代码语言:javascript
运行
复制
from sqlalchemy.dialects.postgresql import insert
meta = MetaData()
jobs_table = Table('jobs', meta, autoload=True, autoload_with=engine)
stmt = insert(jobs_table).values(jobs)
stmt = stmt.on_conflict_do_update(index_elements=['j_id'],
                                  set_= dict(active=True))
result = engine.execute(stmt)
return result.is_insert

您可以对这些语句执行print(stmt)操作,以查看结果SQL查询。这对于查看要执行的语句是否具有预期的表达式非常有用。此外,向create_engine添加echo=True有助于检测问题!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66683873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档