2012-04-21 8 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

関連する問題