इस इंसर्ट को ऑप्टिमाइज़ करने के कई तरीके हैं। यहां कुछ उपाय दिए गए हैं:
- आपके पास संपूर्ण डेटासेट पर लूप के लिए है। आप एक
commit()
कर सकते हैं हर 100 या तो - आप एक इंसर्ट में कई पंक्तियां डाल सकते हैं
- आप दोनों को जोड़ सकते हैं और अपने CSV पर प्रत्येक 100 पंक्तियों में एक बहु-पंक्ति सम्मिलित कर सकते हैं
- यदि आपके लिए अजगर की आवश्यकता नहीं है, तो आप इसे सीधे MySQL का उपयोग करके कर सकते हैं जैसा कि बताया गया है यहां ए> . (यदि आप इसे अजगर का उपयोग करके करते हैं, तो आप अभी भी उस कथन को अजगर में तैयार कर सकते हैं और फ़ाइल के माध्यम से मैन्युअल रूप से लूपिंग से बच सकते हैं)।
उदाहरण:
सूची में नंबर 2 के लिए, कोड में निम्नलिखित संरचना होगी:
def csv_to_DB(xing_csv_input, db_opts):
print("Inserting csv file {} to database {}".format(xing_csv_input, db_opts['host']))
conn = pymysql.connect(**db_opts)
cur = conn.cursor()
try:
with open(xing_csv_input, newline='') as csvfile:
csv_data = csv.reader(csvfile, delimiter=',', quotechar='"')
to_insert = []
insert_str = "INSERT INTO table_x (ID, desc, desc_version, val, class) VALUES "
template = '(%s, %s, %s, %s, %s)'
count = 0
for row in csv_data:
count += 1
to_insert.append(tuple(row))
if count % 100 == 0:
query = insert_str + '\n'.join([template % r for r in to_insert])
cur.execute(query)
to_insert = []
conn.commit()
query = insert_str + '\n'.join(template % to_insert)
cur.execute(query)
conn.commit()
finally:
conn.close()