檢索大型結果集可能會對內存資源造成壓力,尤其是當必須獲取全部結果集時在啟動期間立即。雖然將 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中文網其他相關文章!