Я пытаюсь автоматически генерировать запросы. Я думал об использовании executemany, но мне нужно использовать оператор возврата, поэтому я сделал:
def format_bind(cols, rows):
return '(' + '), ('.join([', '.join(['%s'] * cols)] * rows) + ')'
def insert_many(table, values, id_column):
if not values:
return []
keys = values[0].keys()
conn = psycopg2.connect("dbname='db' user='postgres' host='localhost' password='postgres'")
cursor = conn.cursor()
query = cursor.mogrify("INSERT INTO {} ({}) VALUES {} RETURNING {}".format(table,
', '.join(keys),
format_bind(len(keys), len(values)),
id_column),
[tuple(v.values()) for v in values])
cursor.execute(query)
return [t[0] for t in (cursor.fetchall())]
Проблема в том, что когда я запускаю его, я получаю: error list index out of range
Может ли кто-нибудь помочь мне исправить это?