2017-10-09 134 views
0

我读取一个文件并构造每行读取字典。SQLAlchemy批量插入字典列表

在for循环im追加到列表中的那些字典,当len(list)大于10K时,我将列表发送到con.execute(add.insert(list))并清除列表。 问题是dictionarys的最后一个列表不是10K,所以我想插入最后一批。

我不认为建立和inmemory大词典的列表,然后遍历列表将是一个performatic方式来处理这个。

SQLAlchemy中是否有一个方法,我只是发送字典并设置批量大小的大小限制,以便它自己处理负载?或其他解决办法...

chunks.append(data_dict) 
    if len(chunks) == 10000: 
     con.execute(add.insert(chunks)) 
     del chunks[:] 

.newb slqalchemy学习者

回答

1

对于一个天真的解决方案,你可以利用你可以访问的最后一个变量在for循环外循环的事实。添加一些其他的调整,我认为这会工作:

for counter, data_dict in enumerate(data_dict_list): 
    chunks.append(data_dict) 
    if counter % 10000 == 0 and counter != 0: 
     con.execute(add.insert(chunks)) 
     chunks = [] 
con.execute(add.insert(chunks)) 

如果要采取更多的SQLAlchemy的优势都具备这个文档页面有如下类似的模式批量插入的例子:

http://docs.sqlalchemy.org/en/latest/faq/performance.html#i-m-inserting-400-000-rows-with-the-orm-and-it-s-really-slow

+0

感谢ACV的确帮助了一些小小的调整,现在看起来很稳定。 –

+0

Boa,valeu @JorgeVidinha;) – ACV

+0

:-) Ohoh foi joia mesmo。 Valeu obrigado。 –