私はMySQLデータベースから多くのデータを取得するクエリを持っています。すべてのデータをメモリにロードすることはオプションではありません。幸運なことに、SQLAlchemyでは、MySQLのSSCursorを使用してエンジンを作成できるため、データがストリーミングされ、メモリに完全にロードされません。素晴らしいことだSQLAlchemyは一部のクエリに対してのみMySQLのSSCursorを使用できますか?
create_engine(connect_str, connect_args={'cursorclass': MySQLdb.cursors.SSCursor})
を、私は非常に小さなものも含めてすべての私のクエリに対してSSCursorを使用したくない:私はそうのようにこれを行うことができます。私はむしろそれが本当に必要なところでそれを使うだけです。私はそうのように設定stream_results
でこれを行うことができると思った:それを使用するときのメモリ使用量を監視する際
conn.execution_options(stream_results=True).execute(MyTable.__table__.select())
は残念ながら、それは私がいないかのようにメモリの正確な同じ量を使用しているようですそれを行うと、SSCursor
を使用して、私のメモリ使用量は期待どおりにゼロになります。私は何が欠けていますか?これを達成する他の方法はありますか? docsから
これは、私が質問をする前に一緒に行く巻き上げ何本質的です。ちょうど余分な接続を開いて管理し過ぎるように思える。誰かがより良い方法を持っているかどうかを確認するのにもう少し時間がかかりますが、そうでない場合は正しいとマークします。 – Eli