我想使用psycopg2来一次性插入多行数据,并使用单个查询返回所有id(按顺序)。这就是PostgreSQL的RETURNING扩展设计的用途,使用cursor.execute似乎可以正常工作:
cursor.execute(
"INSERT INTO my_table (field_1, field_2) "
"VALUES (0, 0), (0, 0) RETURNING id;"
)
print cursor.fetchall()
[(1,), (2,)]
现在,为了传递动态生成的数据,似乎cursor.executemany
是最好的选择:
data = [(0, 0), (0, 0)]
cursor.executemany(
"INSERT INTO my_table (field_1, field_2) "
"VALUES (%s, %s) RETURNING id;",
data
)
然而,在这种情况下,
cursor.fetchall()
会产生以下结果:[(4,), (None,)]
我该如何让它正确返回所有的
id
,而不仅仅是一个?