2012-04-21 33 views
2

我想使用SQLalchemy讀取200 MB csv文件。每行有大約30列,其中,我使用下面的代碼只使用8列。但是,代碼運行非常慢!有沒有辦法改善這一點?我想使用地圖/列表理解或其他技術。正如你所說,我是一個新手。謝謝你的幫助。使用SQLalchemy讀取大文件

for ddata in dread:   
    record = DailyData() 
    record.set_campaign_params(pdata) #Pdata is assigned in the previous step   
    record.set_daily_data(ddata) #data is sent to a class method where only 8 of 30 items in the list are used  
    session.add(record) 
    session.commit() #writing to the SQL database. 

回答

4

不對每條記錄進行提交。提交或只是沖洗每1000個左右:

for i, data in enumerate(csv_stuff): 
    rec = MyORMObject() 
    rec.set_stuff(data) 
    session.add(rec) 
    if i % 1000 == 0: 
     session.flush() 
session.commit() # flushes everything remaining + commits 

如果這仍然給你問題,那麼一些基本信息,請參閱我的文章在How can I profile a SQLAlchemy powered application?

+0

謝謝!這導致了速度的大幅提升。我還將使用分析器來更多地瞭解SQLalchemy優化 – user1347835 2012-04-23 20:37:27