【发布时间】:2025-12-14 08:05:02
【问题描述】:
我想以最少的努力进行更新,为简单起见,我减少了列,这不起作用:
sql = '''INSERT INTO temp.tickets
(id, created_at, updated_at, emails, status)
VALUES
(%s, %s, %s, %s, %s)
ON CONFLICT (id)
DO UPDATE SET ( emails, status) values (%s,%s)
'''
cursor = cm.cursor()
## cm is a custom module
cursor.execute(sql, (ticket['id'],
ticket['created_at'],
ticket['updated_at'],
ticket['emails'], ticket['status'], )
此代码显示错误:
return super(DictCursor, self).execute(query, vars)
IndexError: tuple index out of range
我需要更改cursor.execute() 中的哪些内容才能工作?
波纹管代码有效,但我喜欢使用 %s 而不是每列输入:email = excluded.email
sql = '''INSERT INTO temp.tickets
(id, created_at, updated_at, emails, status)
VALUES
(%s, %s, %s, %s, %s)
ON CONFLICT (id)
DO UPDATE SET emails = excluded.eamils, status = excluded.status
'''
cursor = cm.cursor()
# cm is a custom module
cursor.execute(sql, (ticket['id'],
ticket['created_at'],
ticket['updated_at'],
ticket['emails'], ticket['status'], )
【问题讨论】:
标签: python sql database postgresql upsert