从executemany语句中获取“返回”值
问题描述:
在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,“没有结果取”。
这只是一个根本不可能的事情,或者我没有正确地调用结果?
答
我认为你想要做的事是不可能的。
首先,就PEP 249而言,您已经是一个狡猾的地方。具体来说,这是关于executemany的说法。
使用此方法,用于产生一个或多个结果集的操作的构成未定义的行为,并执行被许可(但不是必需的),当它检测到一个结果集已经通过创建引发异常调用操作。
如果您查看psycopg2源代码,您可以看到executemany设置了no_result
标志。当你追踪到code that handles the query时,你可以看到它丢弃了任何结果(发布时为1582-1595行)。
谢谢,这些来源是权威性的。这似乎是一个不行。不会追求。 – user3556757
看来你是对的。我在'execute'上使用'fetchall()'而不在'executemany()'上使用。 – AKS