Psycopg 2.7 में नई execute_values
विधि :
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 में इसे करने का पायथोनिक तरीका:
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)
स्पष्टीकरण: यदि सम्मिलित किए जाने वाले डेटा को टुपल्स की सूची के रूप में दिया गया है
data = [(1,'x'), (2,'y')]
तब यह पहले से ही सटीक आवश्यक प्रारूप में है
क्लॉज का values
सिंटैक्स insert
रिकॉर्ड की सूची की अपेक्षा करता है
insert into t (a, b) values (1, 'x'),(2, 'y')
Psycopg
एक अजगर tuple
को एक पोस्टग्रैस्कल के लिए अनुकूल करता है record
।
एकमात्र आवश्यक कार्य मानसोपग द्वारा भरे जाने के लिए रिकॉर्ड सूची टेम्पलेट प्रदान करना है
# We use the data list to be sure of the template length
records_list_template = ','.join(['%s'] * len(data))
और इसे insert
क्वेरी में रखें
insert_query = 'insert into t (a, b) values {}'.format(records_list_template)
insert_query
आउटपुट प्रिंट करना
insert into t (a, b) values %s,%s
अब सामान्य Psycopg
तर्क प्रतिस्थापन के लिए
cursor.execute(insert_query, data)
या बस परीक्षण क्या सर्वर को भेजा जाएगा
print (cursor.mogrify(insert_query, data).decode('utf8'))
आउटपुट:
insert into t (a, b) values (1, 'x'),(2, 'y')
execute
रणनीति का उपयोग किया जाए । मैंने लगभग 100x का स्पीडअप देखा इसके लिए धन्यवाद!