try:
connection = psycopg2.connect(**postgres_credentials())
cursor = connection.cursor()
records = [(1,'FOO'),(2,'SPAM')]
placeholders = ','.join(['%s']*len(records)) # => '%s,%s'
sql = f"""
INSERT INTO schema.table(id, field)
VALUES {placeholders}
"""
# Mogrify helpful to debug command sent to DB bc transforms command into human readable form.
# It's not necessary. Could just use executemany, but slower & harder to debug command as SO suggests.
insert_statement = cursor.mogrify(sql, records)
# print(insert_statement.decode('utf-8'))
cursor.execute(insert_statement)
# cursor.executemany(sql, records) # SLOW bc executes and commits each record one at a time.
# print(cursor.mogrify(sql, records).decode('utf-8'))
connection.commit()
except psycopg2.DatabaseError:
raise
finally:
if not connection.closed:
cursor.close()
connection.close()