execute_values
Metode baru di 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
)
Cara pythonic melakukannya di 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)
Penjelasan: Jika data yang akan dimasukkan diberikan sebagai daftar tupel seperti di
data = [(1,'x'), (2,'y')]
maka sudah dalam format yang diperlukan sebagai
yang values
sintaks dari insert
klausul mengharapkan daftar catatan seperti di
insert into t (a, b) values (1, 'x'),(2, 'y')
Psycopg
mengadaptasi Python tuple
ke Postgresql record
.
Satu-satunya pekerjaan yang diperlukan adalah menyediakan template daftar catatan untuk diisi oleh psycopg
# We use the data list to be sure of the template length
records_list_template = ','.join(['%s'] * len(data))
dan letakkan di insert
kueri
insert_query = 'insert into t (a, b) values {}'.format(records_list_template)
Mencetak insert_query
output
insert into t (a, b) values %s,%s
Sekarang dengan Psycopg
substitusi argumen biasa
cursor.execute(insert_query, data)
Atau hanya menguji apa yang akan dikirim ke server
print (cursor.mogrify(insert_query, data).decode('utf8'))
Keluaran:
insert into t (a, b) values (1, 'x'),(2, 'y')
execute
strategi. Saya melihat percepatan sekitar 100x berkat ini!