我的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)
如果它不存在,我需要获取新插入的状态值id,或者如果已存在则选择其id。 RETURNING id
完全扼杀了这个查询,所以我不得不删除它至少让选择性插入工作。
有关如何获取statusId的任何线索?在另一个例子中,我正在做一个Upsert。(如果不存在则插入,否则更新)这里再次,我需要插入或更新的行id。 (不,我没有使用存储过程,如果那是你的第一个问题......)
提前致谢
答案 0 :(得分:10)
我不能说我完全理解你坚持单一查询的动机。我认为你最好的选择是提出两个简单的问题:
SELECT id FROM statustable WHERE value = '%s'
。如果条目存在,这将为您提供id,在这种情况下跳过步骤2; INSERT INTO statustable(value) VALUES('%s') RETURNING id
。这将为您提供新创建的条目的id
。最后 - 虽然我还没有验证这是否是一个问题 - 提交中的fetchone()
看起来有点怀疑。