2010-01-26 99 views
9

理想情況下,我想能夠做這樣的事情:返回值與psycopg2

id_of_new_row = cursor.lastrowid() 

中,我得到了新創建或修改行的id。但這不是psycopg2可用的。另外,我已經試過這樣:

id_of_new_row = cursor.execute('INSERT INTO this_table (value1, value2, value3) VALUES (%s, %s, %s) RETURNING id', (some_value1, some_value2, some_value3)) 

不工作,可能是因爲它不知道該ID提交由後才...

幫助!

+0

你想要什麼樣的ID來獲得 - OID或字段的值聲明SERIAL? – 2010-01-27 00:29:50

+0

我不知道。我是新來的。這是一個django項目,django根據我的模型使用syncdb設置postgres數據庫。我不確定django是否在表創建期間自動聲明OID。除非另有說明,我需要每行的主鍵,它由django自動生成爲「id」。我會做一些閱讀。 – 2010-01-27 16:10:07

回答

19

當然,只要命令完成,它就會知道ID,這就是RETURNING的實現方式。您需要實際獲取它,所以類似於:

cursor.execute("INSERT INTO .... RETURNING id") 
id_of_new_row = cursor.fetchone()[0] 

應該在您的方案中工作。

+0

令人驚歎。謝謝! – 2010-01-27 16:11:17

+0

是從執行查詢結果中獲取值的唯一方法。有三種方法可以獲得價值嗎?像row.id? – 2015-03-20 07:36:30

3

PostgreSQL的RETURNING作品> = 8.2