解決python讀取幾千萬行的大表內(nèi)存問題
Python導數(shù)據(jù)的時候,需要在一個大表上讀取很大的結(jié)果集。
如果用傳統(tǒng)的方法,Python的內(nèi)存會爆掉,傳統(tǒng)的讀取方式默認在內(nèi)存里緩存下所有行然后再處理,內(nèi)存容易溢出
解決的方法:
1)使用SSCursor(流式游標),避免客戶端占用大量內(nèi)存。(這個cursor實際上沒有緩存下來任何數(shù)據(jù),它不會讀取所有所有到內(nèi)存中,它的做法是從儲存塊中讀取記錄,并且一條一條返回給你。)
2)使用迭代器而不用fetchall,即省內(nèi)存又能很快拿到數(shù)據(jù)。
import MySQLdb.cursors conn = MySQLdb.connect(host='ip地址', user='用戶名', passwd='密碼', db='數(shù)據(jù)庫名', port=3306, charset='utf8', cursorclass = MySQLdb.cursors.SSCursor) cur = conn.cursor() cur.execute("SELECT * FROM bigtable"); row = cur.fetchone() while row is not None: do something row = cur.fetchone() cur.close() conn.close()
需要注意的是,
1、因為SSCursor是沒有緩存的游標,結(jié)果集只要沒取完,這個conn是不能再處理別的sql,包括另外生成一個cursor也不行的。
如果需要干別的,請另外再生成一個連接對象。
2、 每次讀取后處理數(shù)據(jù)要快,不能超過60s,否則mysql將會斷開這次連接,也可以修改 SET NET_WRITE_TIMEOUT = xx 來增加超時間隔。
以上這篇解決python讀取幾千萬行的大表內(nèi)存問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Python StringIO模塊實現(xiàn)在內(nèi)存緩沖區(qū)中讀寫數(shù)據(jù)
- python監(jiān)控linux內(nèi)存并寫入mongodb(推薦)
- 用Python的Flask框架結(jié)合MySQL寫一個內(nèi)存監(jiān)控程序
- 使用Python獲取CPU、內(nèi)存和硬盤等windowns系統(tǒng)信息的2個例子
- python中查看變量內(nèi)存地址的方法
- 談談如何手動釋放Python的內(nèi)存
- Python深入學習之內(nèi)存管理
- 2款Python內(nèi)存檢測工具介紹和使用方法
- 淺談Python 對象內(nèi)存占用
- Python利用多進程將大量數(shù)據(jù)放入有限內(nèi)存的教程
- Python內(nèi)存讀寫操作示例
相關(guān)文章
python循環(huán)控制之break和continue流程控制語句
這篇文章主要介紹了python循環(huán)控制之break流程控制語句,Python中提供了兩個關(guān)鍵字用來控制循環(huán)語句,分別是break和continue,本文都有介紹,需要的朋友可以參考一下2022-03-03在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
這篇文章主要介紹了在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程,Debian系統(tǒng)和Nginx服務器皆是高性能的選擇,需要的朋友可以參考下2015-04-04Python實現(xiàn)調(diào)用另一個路徑下py文件中的函數(shù)方法總結(jié)
這篇文章主要介紹了Python實現(xiàn)調(diào)用另一個路徑下py文件中的函數(shù)方法,結(jié)合實例形式總結(jié)分析了Python針對不同文件夾中py文件調(diào)用操作的處理技巧與相關(guān)注意事項,需要的朋友可以參考下2018-06-06Python?Flask實現(xiàn)快速構(gòu)建Web應用的方法詳解
Flask是一個輕量級的Web服務器網(wǎng)關(guān)接口(WSGI)web應用框架,本文將和大家一起詳細探討一下Python?Flask?Web服務,需要的小伙伴可以學習一下2023-06-06Python必備shelve與dbm本地持久化存儲數(shù)據(jù)的兩個強大工具
當涉及存儲大量數(shù)據(jù)并且需要高效訪問時,shelve和dbm模塊是Python中用于本地持久化存儲數(shù)據(jù)的兩個強大工具,它們允許開發(fā)人員以鍵值對的形式存儲數(shù)據(jù),并支持快速的檢索和更新操作,在本文將深入探討這兩個模塊,展示它們的優(yōu)勢和應用場景2024-01-01基于Python的OpenCV骨架化圖像并顯示(skeletonize)
這篇文章主要介紹了基于Python的OpenCV骨架化圖像并顯示(skeletonize),文中附含詳細的示例代碼,教大家來實現(xiàn)完成,有需要的可以參考下2021-08-08