我的Postgres的查詢選擇行ID在Postgres的是:如何獲得插入或使用python
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。 (不,我不使用存儲過程,如果這是你的第一個問題...)提前
它讓我感到最快的方法是做三個查詢(如果需要的話,在一個事務中)。 1)「SELECT id FROM statustable WHERE value ='%s'」%(status)2)如果沒有行返回,「INSERT INTO statustable(value),'%s'」%(status)。 3)「SELECT curval(pk_seq)」,無論pk_seq被稱爲主鍵id的序列。但是由於這不是你要求的,這不是一個答案。 –
感謝回覆@ed。 Infact 2&3可以通過INSERT INTO statustable(value),'%s'RETURNING id「%(status)'進行合併,因爲這也會返回id,但我一直在尋找將這一切歸爲一整體 – jerrymouse