gpt4 book ai didi

sqlalchemy - 批量插入 sqlalchemy 核心与冲突更新

转载 作者:行者123 更新时间:2023-12-05 04:51:54 28 4
gpt4 key购买 nike

我想将多个项目插入到一个表中,并在发生冲突时更新该表。这是我想出的以下内容

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 是一个唯一字段,如果该行已存在,我将尝试对其进行更新。如果该行已存在,我会收到以下错误。

(psycopg2.IntegrityError) duplicate key value violates unique constraint "j_id"
DETAIL: Key (j_id)=(0ea445da-bd1d-5571-9906-0694fa85728a) already exists.

我在这里遗漏了什么吗?

最佳答案

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

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 查询。这对于查看您要执行的语句是否具有预期的表达式很有用。将 echo=True 添加到 create_engine 也有助于检测问题!

关于sqlalchemy - 批量插入 sqlalchemy 核心与冲突更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66683873/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com