Neue execute_values
Methode in Psycopg 2.7:
data = [(1,'x'), (2,'y')]
insert_query = 'insert into t (a, b) values %s'
psycopg2.extras.execute_values (
cursor, insert_query, data, template=None, page_size=100
)
Die pythonische Methode in Psycopg 2.6:
data = [(1,'x'), (2,'y')]
records_list_template = ','.join(['%s'] * len(data))
insert_query = 'insert into t (a, b) values {}'.format(records_list_template)
cursor.execute(insert_query, data)
Erläuterung: Wenn die einzufügenden Daten als Liste von Tupeln wie in angegeben sind
data = [(1,'x'), (2,'y')]
dann ist es schon im genau gewünschten format als
Die values
Syntax der insert
Klausel erwartet eine Liste von Datensätzen wie in
insert into t (a, b) values (1, 'x'),(2, 'y')
Psycopg
passt einen Python tuple
an einen Postgresql an record
.
Die einzige notwendige Arbeit besteht darin, eine Datensatzlistenvorlage bereitzustellen, die von psycopg ausgefüllt werden soll
# We use the data list to be sure of the template length
records_list_template = ','.join(['%s'] * len(data))
und platzieren Sie es in der insert
Abfrage
insert_query = 'insert into t (a, b) values {}'.format(records_list_template)
Drucken der insert_query
Ausgänge
insert into t (a, b) values %s,%s
Nun zu den üblichen Psycopg
Argumentationsersetzungen
cursor.execute(insert_query, data)
Oder testen Sie einfach, was an den Server gesendet wird
print (cursor.mogrify(insert_query, data).decode('utf8'))
Ausgabe:
insert into t (a, b) values (1, 'x'),(2, 'y')
execute
Strategie zu verwenden. Dank dessen habe ich eine Beschleunigung von ungefähr 100x gesehen!