2017-10-09 108 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。 –