在psycopg2中使用Postgresql 9.5。
使用“returning”,我可以检索插入的单行的“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]

但这会抛出一个数据库错误,“没有要获取的结果”。
这是根本不可能做到的事情,还是我没有正确地要求结果?

最佳答案

我认为你要做的是不可能的。
首先,就PEP249而言,你已经处于危险境地。它特别提到了执行人。
对生成一个或多个结果集的操作使用此方法构成未定义的行为,并且允许(但不是必需的)实现在检测到调用操作已创建结果集时引发异常。
如果查看psycopg2源代码,可以看到executemany设置了no_result标志。当您追踪到code that handles the query时,您可以看到它会丢弃任何结果(在发布时是第1582-1595行)。

关于python - 从executemany语句中获取“返回”值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37695004/

10-13 07:49
查看更多