使用Python和SqlAlchemy将csv文件写入MySQL数据库的简单代码会占用太多ram。有什么最佳解决方法吗?

使用Python和SqlAlchemy将csv文件写入MySQL数据库的简单代码会占用太多ram。有什么最佳解决方法吗?,python,mysql,csv,sqlalchemy,Python,Mysql,Csv,Sqlalchemy,我有一些将数据写入数据库的代码,查看了几十万行,这并不极端,但它会导致我的开发计算机挂起。代码大致如下所示 input_reader = csv.reader(open(filename), delimiter=',', quotechar='"') count = 0 for line in input_reader: obj = ObjectToEnter(line[1], line[2]) child_obj = ChildObject(line[5]) #possibly

我有一些将数据写入数据库的代码,查看了几十万行,这并不极端,但它会导致我的开发计算机挂起。代码大致如下所示

input_reader = csv.reader(open(filename), delimiter=',', quotechar='"')
count = 0
for line in input_reader:
    obj = ObjectToEnter(line[1], line[2])
    child_obj = ChildObject(line[5]) #possibly a few children are entered
    obj.relation.append(child_obj)
    session.add(obj)
    count += 1
session.commit()
这会消耗内存,我的直觉告诉我,可能每提交500个对象,比如if count%500==0:session.commit()


问题是,每x行提交一次,或者偶尔刷新一次是否有助于解决问题?我在这里错过了更好的练习吗?请注意,这段精确的代码适用于可以放入内存的较小数据集。

您的直觉是正确的。您尝试将整个会话信息(随着您阅读更多行而增加)放入内存中。偶尔的
commit()
应该可以做到这一点。果然做到了。我想知道您使用的提交数量是否有一些优化。例如,是否每行都过多。我不确定数据的大小,但每行提交几乎是过多。我会选择每1000行左右(但这是一个疯狂的猜测)。你的直觉是正确的。您尝试将整个会话信息(随着您阅读更多行而增加)放入内存中。偶尔的
commit()
应该可以做到这一点。果然做到了。我想知道您使用的提交数量是否有一些优化。例如,是否每行都过多。我不确定数据的大小,但每行提交几乎是过多。我会选择每1000行左右(但这是一个疯狂的猜测)。