Я могу прочитать сжатые файлы CSV в память, я могу вставить данные CSV из памяти в базу данных sqlite, но время для этого очень долго. Я провел три испытания: два чтения архива в память и вставку (одно с определением и одно без определения) и одно для извлечения файлов, а затем с помощью csv reader для вставки в базу данных sqlite.
вот результаты:
тест 1: zip-файл в код stringIO без определения для вставки в sqlite db
runfile ('C: / python_project_scripts / zipprd_csv_tbl_2 sqlite_db.py', wdir = 'C: / python_project_scripts')
иметь соединение дб; Trade-Exports-Chp-47.csv Время выполнения: 1619,531 с
тест 2: zip-файл в код stringIO с def для вставки в sqlite db
runfile ('C: / python_project_scripts / zipprd_csv_tbl_2 sqlite_db.py', wdir = 'C: / python_project_scripts')
иметь соединение дб; Trade-Exports-Chp-47.csv Время выполнения: 1627,567 с
тест 3: разархивировать файлы, прочитать CSV-файл и вставить в sqlite db
runfile ('C: / python_project_scripts / zipprd_csv_tbl_2 sqlite_db.py', wdir = 'C: / python_project_scripts')
иметь соединение дб; Trade-Exports-Chp-47.csv Время выполнения: 3,559 с
Мой опыт со временем, затраченным на чтение заархивированного файла в память и затем вставку в базу данных sqlite, является общим?
все файлы находятся на жестком диске моего компьютера с использованием windows 7, python 2.7, sqlite3 2.6
~
фрагмент кода:
zfile = zipfile.ZipFile(z)
data = StringIO.StringIO(zfile.read(_file)) #don't forget this line!
if re.match(r'^Trade-.*\ports-Chp.*\.csv$', _file):
# send to read file and insert into db
fieldnames = ['hs_code', 'uom', 'country', 'state', 'prov', 'value', 'quantity', 'year', 'month']
dr = csv.DictReader(os.path.join(DIR_PATH, _file), fieldnames=fieldnames)
to_db = [(i['hs_code'], i['uom'], i['country'], i['state'], i['prov'], i['value'], i['quantity'], i['year'], i['month']) for i in dr]
cur.executemany("INSERT INTO exp_data VALUES (NULL,?,?,?,?,?,?,?,?,?);", to_db)
conn.commit()
~