jer*_*use 9 python postgresql upsert
我的postgres查询是:
query = """INSERT INTO statustable(value) SELECT '%s'
WHERE NOT EXISTS (SELECT id, value FROM statustable
WHERE value = '%s') RETURNING id""" % (status, status)
cursor_postgres.execute(query)
conn_postgres.commit()
statusId = cursor_postgres.fetchone()[0]
print "statusId" + str(statusId)
Run Code Online (Sandbox Code Playgroud)
如果它不存在,我需要获取新插入的状态值id,或者如果已存在则选择其id.RETURNING id完全扼杀了这个查询所以我不得不删除它至少得到选择性插入工作.
有关如何获取statusId的任何线索?在另一个例子中,我正在做一个Upsert.(如果不存在则插入,否则更新)这里再次,我需要插入或更新的行id.(不,我没有使用存储过程,如果那是你的第一个问题...)
提前致谢
NPE*_*NPE 10
我不能说我完全理解你坚持单一查询的动机.我认为你最好的选择是有两个简单的查询:
SELECT id FROM statustable WHERE value = '%s'.如果条目存在,这将为您提供id,在这种情况下跳过步骤2;INSERT INTO statustable(value) VALUES('%s') RETURNING id.这将为您id提供新创建的条目.最后 - 虽然我还没有验证这是否是一个问题 - fetchone()在提交中看起来有点怀疑.