2016-06-08 117 views
0

在psycopg2中使用Postgresql 9.5。從executemany語句中獲取「返回」值

使用'返回',我可以檢索插入的單行'id'。

sql = "insert into %s (%s) values (%s) returning id" % (table_name, columns, values_template)   
values = tuple(row_dict[key] for key in keys) 
cur.execute(sql, values) 
id_new_row = cur.fetchone()[0] 

我希望也檢索最後使用executemany語句插入多行的ID。

cur.executemany(insert_sql , data_dict) 
#get id of the last row inserted 
id_new_row = cur.fetchone()[0] 

但是,這引發了一個DatabaseError,「沒有結果取」。

這只是一個根本不可能的事情,或者我沒有正確地調用結果?

回答

1

我認爲你想要做的事是不可能的。

首先,就PEP 249而言,您已經是一個狡猾的地方。具體來說,這是關於executemany的說法。

使用此方法,用於產生一個或多個結果集的操作的構成未定義的行爲,並執行被許可(但不是必需的),當它檢測到一個結果集已經通過創建引發異常調用操作。

如果您查看psycopg2源代碼,您可以看到executemany設置了no_result標誌。當你追蹤到code that handles the query時,你可以看到它丟棄了任何結果(發佈時爲1582-1595行)。

+0

謝謝,這些來源是權威性的。這似乎是一個不行。不會追求。 – user3556757

+0

看來你是對的。我在'execute'上使用'fetchall()'而不在'executemany()'上使用。 – AKS