如何将CSV文件迁移到Sqlite3(或MySQL)?- Python
我正在用Python逐行保存数据……但是这个速度实在是太慢了!
这个CSV文件有7000万行,而我的脚本每秒只能存1000行。
这是我的脚本的样子
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 个回答
3
我不知道这些建议是否会有很大的帮助,但既然你在使用Django的ORM(对象关系映射),我可以给你一些建议:
- 确保在你的Django设置文件中将DEBUG设置为False,因为如果不这样做,你会把每一个查询都存储在内存中。
- 把你的逻辑放在一个主函数里,然后用django.db.transactions.commit_on_success这个装饰器把它包裹起来。这样可以避免每一行都需要单独的事务,这样会大大加快处理速度。
- 如果你知道文件中的所有行在数据库中都不存在,可以在调用save()方法时加上force_insert=True。这样可以减少对sqlite的调用次数,减少一半。
如果你使用的是客户端-服务器的数据库管理系统,这些建议可能会带来更大的改善。
4
关于MySQL导入:
mysqlimport [options] db_name textfile1 [textfile2 ...]
关于SQLite3导入: