如何将CSV文件迁移到Sqlite3(或MySQL)? - Python

时间:2010-10-18 11:42:19

标签: python mysql django sqlite csv

我正在使用Python来逐行保存数据......但这非常慢!

CSV包含 7000万行,而我的脚本我可以每秒存储1千行


这是我的脚本的样子

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 个答案:

答案 0 :(得分:4)

对于MySQL导入:

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

对于SQLite3导入:

ref How to import load a .sql or .csv file into SQLite?

答案 1 :(得分:3)

我不知道这是否会产生足够大的差异,但由于你正在处理Django ORM,我可以提出以下建议:

  1. 确保Django设置文件中的DEBUG为False,否则您将每个查询存储在内存中。
  2. 将您的逻辑放在main函数中,并将其包装在django.db.transactions.commit_on_success装饰器中。这将阻止每一行需要它自己的交易,这将大大加快这一过程。
  3. 如果您知道文件中的所有行都不存在于数据库中,请在调用save()方法时添加force_insert = True。这将减少所需的sqlite调用次数。
  4. 如果您发现自己使用客户端 - 服务器DBMS,这些建议可能会产生更大的差异。