2017-10-19 14 views
0

どのようにsqlalchemyがバッファリング/チャンクを処理しますか?私は、彼らがすべて利用可能だとき、それはすべてを一度に行の処理だと(正しく?)推測ResultProxy docsからの読み込みチャンクでsqlalchemyを照会する方法は?

with open('out', 'w') as f: 
    query = table.select() 
    for row in engine.execute(query): 
     output_row = make_row_string(row) 
     print(output_row, file=f) 

。多列問合せに対してこのジョブを高速化するために、チャンクで問合せおよび処理するにはどうすればよいですか。

多くの行のクエリを処理するための2つのアイデアは、.fetchmany(chunksize) while Trueまたはitertoolsチャンクです。リモートデータベースから多くの行を取得するための推奨される方法は何ですか?

答えて

0

あなたはstream_resultsを使用してクエリの全体の結果セットを読み込む避けることができます。

engine.execution_options(stream_results=True) 

注意をストリーミングの結果は、おそらくどの速くクエリを作成しないこと - それが唯一それが少ないメモリを使用します。また、出力形式がCSVの場合は、COPYを使用する方がはるかに高速です。

関連する問題