"Konwertuję" duży (~ 1.6GB) plik CSV i wstawiam określone pola CSV do bazy danych SQLite. Zasadniczo mój kod wygląda następująco:Python CSV do 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))
Wszystko działa jak oczekuję go z wyjątkiem ... Trwa niesamowita ilość czasu na przetworzenie. Czy koduję go niepoprawnie? Czy istnieje lepszy sposób na osiągnięcie wyższej wydajności i osiągnięcie tego, czego potrzebuję (wystarczy przekonwertować kilka pól pliku CSV na tabelę SQLite)?
** EDYCJA - próbowałem bezpośrednio importować csv do sqlite zgodnie z sugestiami, ale okazało się, że mój plik ma przecinki w polach (np. "My title, comma"
). To powoduje błędy przy imporcie. Wydaje się, że jest zbyt wiele z tych zdarzeń ręcznie edytować plik ...
wszelkie inne myśli ?? **
To duży plik. Jak dużo czasu to zajmuje? – Blender
Ile jest zduplikowanych rekordów? Jeśli jest ich dużo, prawdopodobnie będzie to szybsze przechowywanie lokalnego 'zestawu' rekordów, które już zostały wstawione, i pominięcie wywołania do SQL w całości dla duplikatów. – kindall
[tutaj] (http://dev.mysql.com/doc/refman/5.5/en/insert-speed.html) to niektóre wskazówki dotyczące prędkości ładowania zbiorczego MySQL. – kindall