2

SQLalchemy を使用して 200 MB の csv ファイルを読み込もうとしています。各行には約 30 列ありますが、以下のコードを使用して 8 列のみを使用します。ただし、コードの実行速度は非常に遅いです。これを改善する方法はありますか?マップ/リスト内包表記またはその他の手法を使用したいと考えています。おっしゃる通り、初心者です。ご協力いただきありがとうございます。

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

1 に答える 1

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

それでも問題が解決しない場合は、基本的なプロファイリングを行ってください。SQLAlchemyを利用したアプリケーションをプロファイリングするにはどうすればよいですか?の私の投稿を参照してください。

于 2012-04-22T01:13:35.870 に答える