大規模な結果セットを取得すると、特に結果セットをすべてフェッチする必要がある場合に、メモリ リソースに負担がかかる可能性があります。起動時に一度に。 fetchall() をベース カーソルで使用するのは簡単な解決策のように思えるかもしれませんが、大量のメモリを消費します。ここで、MySQLDB の SSCursors (ストリーミング結果セット カーソル) が活躍します。
SSCursors は、メモリ使用量を最小限に抑えて、ストリーミング形式で結果を取得する方法を提供します。
<code class="python">import MySQLdb.cursors connection = MySQLdb.connect( host="thehost", user="theuser", passwd="thepassword", db="thedb", cursorclass=MySQLdb.cursors.SSCursor ) cursor = connection.cursor() cursor.execute(query) for row in cursor: # Process or store the current row</code>
fetchall() とは異なり、結果セット全体をメモリにロードします。それを返すと、SSCursors は行の増分フェッチを有効にします。これにより、メモリ消費量が大幅に削減され、システム リソースが解放されます。
SSCursor の結果を行ごとに、または小さなバッチで反復処理すると、メモリ使用量の点で、 fetchall()に。メモリは、常に処理中の行にのみ割り当てられます。
以上がMySQLDB の SSCursors は大規模な結果セットのメモリ管理をどのように改善できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。