Psycopg 2.7'deki yeni execute_values
yöntem :
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
)
Psycopg 2.6'da bunu yapmanın pythonic yolu:
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)
Açıklama: Eklenecek veriler, aşağıdaki gibi tuples listesi olarak verilirse
data = [(1,'x'), (2,'y')]
zaten tam olarak istenen biçimde
values
sözdizimi insert
maddesi gibi kayıtların listesini ister
insert into t (a, b) values (1, 'x'),(2, 'y')
Psycopg
bir Python'u tuple
bir Postgresql'e uyarlar record
.
Gerekli olan tek iş, psycopg tarafından doldurulacak bir kayıt listesi şablonu sağlamaktır
# We use the data list to be sure of the template length
records_list_template = ','.join(['%s'] * len(data))
ve insert
sorguya yerleştir
insert_query = 'insert into t (a, b) values {}'.format(records_list_template)
insert_query
Çıktıları yazdırma
insert into t (a, b) values %s,%s
Şimdi olağan Psycopg
argümanların ikamesine
cursor.execute(insert_query, data)
Veya sadece sunucuya ne gönderileceğini test edin
print (cursor.mogrify(insert_query, data).decode('utf8'))
Çıktı:
insert into t (a, b) values (1, 'x'),(2, 'y')
execute
stratejiyi kullanmanın daha iyi olduğunu göstermektedir . Bu sayede 100x civarında hız gördüm!