日々精進

新しく学んだことを書き留めていきます

SQLAlchemyで、DBから大量にデータを取ってくる時に一度に全部取得せずちょっとずつ取る

一度に全部の行をDBから取得するとメモリが足りなくなる場合。 以下のようにstream_results=Trueオプションを付けると何行かずつ取得してforループを回してくれる。

import sqlalchemy

engine = sqlalchemy.create_engine('mysql+pymysql://user:pass@host/db')
connection = engine.connect()
results = connection.execution_options(stream_results=True).execute(
  'select * from large_table'
)

for result in results:
    process_result(result)

参考:

ja.stackoverflow.com