如何使用python在postgres中获取插入或选择的行ID

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

我不能说我完全理解你坚持单一查询的动机.我认为你最好的选择是有两个简单的查询:

  1. SELECT id FROM statustable WHERE value = '%s'.如果条目存在,这将为您提供id,在这种情况下跳过步骤2;
  2. INSERT INTO statustable(value) VALUES('%s') RETURNING id.这将为您id提供新创建的条目.

最后 - 虽然我还没有验证这是否是一个问题 - fetchone()在提交中看起来有点怀疑.