Я хотел бы использовать psycopg2 для INSERT
несколько строк, а затем вернуть все id
s (в порядке) с использованием одного запроса. Это то, что RETURNING
расширение в PostgreSQL предназначен для, и это, кажется, работает нормально, используя cursor.execute
:Получение идентификаторов нескольких строк, вставленных в psycopg2
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,)]
Как я могу получить его COR прямо вернуть все id
s вместо одного?
Интересная проблема. версия psycopg2 и базовая версия PostgreSQL на стороне клиента? –
psycopg2 2.4.5 (dt dec pq3 ext) и PostgreSQL 9.2.4 – Jian