Как перенести файл CSV в Sqlite3 (или MySQL)? - питон - PullRequest
7 голосов
/ 18 октября 2010

Я использую Python для сохранения данных строка за строкой ... но это очень медленно!

CSV содержит 70 миллионов строк , и с моимскрипт Я могу просто хранить тысячу в секунду .


Вот как выглядит мой скрипт

reader = csv.reader(open('test_results.csv', 'r'))
for row in reader:
    TestResult(type=row[0], name=row[1], result=row[2]).save()

Я считаю,тестирование Я мог бы рассмотреть MySQL или PostgreSQL.

Есть идеи или советы?Это первый раз, когда я имею дело с такими огромными объемами данных.:)

Ответы [ 2 ]

4 голосов
/ 18 октября 2010

Для импорта MySQL:

mysqlimport [options] db_name textfile1 [textfile2 ...]

Для импорта SQLite3:

ref Как импортировать загрузку файла .sql или .csv в SQLite?

3 голосов
/ 18 октября 2010

Я не знаю, будет ли это иметь достаточно большое значение, но так как вы имеете дело с Django ORM, я могу предложить следующее:

  1. Убедитесь, что DEBUG имеет значение False в вашем файле настроек Django, так как в противном случае вы сохраняете каждый запрос в памяти.
  2. Поместите свою логику в основную функцию и оберните ее в декораторе django.db.transactions.commit_on_success. Это избавит каждую строку от необходимости отдельной транзакции, что существенно ускорит процесс.
  3. Если вы знаете, что все строки в файле не существуют в базе данных, добавьте force_insert = True к вашему вызову метода save (). Это вдвое уменьшит количество необходимых вызовов sqlite.

Эти предложения, вероятно, будут иметь еще большее значение, если вы обнаружите, что используете клиент-серверную СУБД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...