将Postgresql 9.5与psycopg2一起使用。
使用'return',我可以检索我插入的单行的'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,“没有结果可以获取”。
这是根本不可能做到的事情,还是我没有正确地要求结果?
答案 0 :(得分:2)
我认为你想要做的事情是不可能的。
首先,就PEP 249而言,你已经处于狡猾的境地。具体来说,它说的是关于executemany。
将此方法用于生成一个或多个结果集的操作构成未定义的行为,并且当检测到通过调用已创建结果集创建结果集时,允许(但不要求)实现引发异常。操作
如果查看psycopg2源代码,可以看到executemany设置了no_result
标志。当您追踪到code that handles the query时,您可以看到它丢弃任何结果(发布时的第1582-1595行)。