मैं एक बड़ी (~ 1.6 जीबी) सीएसवी फ़ाइल "कनवर्ट करना" और CSV के विशिष्ट फ़ील्ड को SQLite डेटाबेस में सम्मिलित कर रहा हूं। अनिवार्य रूप से मेरी कोड लगता है:पाइथन सीएसवी को SQLite
import csv, sqlite3
conn = sqlite3.connect("path/to/file.db")
conn.text_factory = str #bugger 8-bit bytestrings
cur = conn.cur()
cur.execute('CREATE TABLE IF NOT EXISTS mytable (field2 VARCHAR, field4 VARCHAR)')
reader = csv.reader(open(filecsv.txt, "rb"))
for field1, field2, field3, field4, field5 in reader:
cur.execute('INSERT OR IGNORE INTO mytable (field2, field4) VALUES (?,?)', (field2, field4))
सब कुछ काम करता है के रूप में मैं इसे अपवाद के साथ करने की उम्मीद ... इसे संसाधित करने में समय की एक अविश्वसनीय ले जाता है। क्या मैं इसे गलत तरीके से कोड कर रहा हूं? क्या उच्च प्रदर्शन प्राप्त करने और मुझे जो चाहिए उसे पूरा करने का एक बेहतर तरीका है (बस सीएसवी के कुछ फ़ील्ड को SQLite तालिका में परिवर्तित करें)?
** संपादित करें - मैंने सीएसवी को सीधे एसक्लाइट में आयात करने की कोशिश की है, लेकिन यह पता चला है कि मेरी फाइल फ़ील्ड में अल्पविराम है (उदा। "My title, comma"
)। यह आयात के साथ त्रुटियां पैदा कर रहा है। ऐसा प्रतीत होता है उन घटनाओं की भी कई मैन्युअल फ़ाइल को संपादित करने देखते हैं ...
किसी अन्य विचार ?? **
यह एक बड़ी फाइल है। इसमें कितना समय लगता है? – Blender
कितने डुप्लिकेट रिकॉर्ड हैं? यदि बहुत कुछ है, तो संभवत: पहले से डाले गए रिकॉर्ड्स के स्थानीय 'सेट' को रखने के लिए तेज़ होगा, और पूरी तरह से डुप्लिकेट के लिए कॉल को एसक्यूएल पर छोड़ दें। – kindall
[यहां] (http://dev.mysql.com/doc/refman/5.5/en/insert-speed।एचटीएमएल) कुछ MySQL थोक लोड गति युक्तियाँ हैं। – kindall