【发布时间】:2014-02-07 10:11:24
【问题描述】:
我想使用 psycopg2 到 INSERT 多行,然后使用单个查询返回所有 ids(按顺序)。这就是 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,)]
我如何让它正确返回所有ids 而不仅仅是一个?
【问题讨论】:
-
有趣的问题。 psycopg2 版本,以及底层 PostgreSQL 版本客户端?
-
psycopg2 2.4.5 (dt dec pq3 ext) 和 PostgreSQL 9.2.4
标签: python postgresql psycopg2