解決python讀取幾千萬行的大表內(nèi)存問題
Python導(dǎo)數(shù)據(jù)的時(shí)候,需要在一個(gè)大表上讀取很大的結(jié)果集。
如果用傳統(tǒng)的方法,Python的內(nèi)存會(huì)爆掉,傳統(tǒng)的讀取方式默認(rèn)在內(nèi)存里緩存下所有行然后再處理,內(nèi)存容易溢出
解決的方法:
1)使用SSCursor(流式游標(biāo)),避免客戶端占用大量?jī)?nèi)存。(這個(gè)cursor實(shí)際上沒有緩存下來任何數(shù)據(jù),它不會(huì)讀取所有所有到內(nèi)存中,它的做法是從儲(chǔ)存塊中讀取記錄,并且一條一條返回給你。)
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、因?yàn)镾SCursor是沒有緩存的游標(biāo),結(jié)果集只要沒取完,這個(gè)conn是不能再處理別的sql,包括另外生成一個(gè)cursor也不行的。
如果需要干別的,請(qǐng)另外再生成一個(gè)連接對(duì)象。
2、 每次讀取后處理數(shù)據(jù)要快,不能超過60s,否則mysql將會(huì)斷開這次連接,也可以修改 SET NET_WRITE_TIMEOUT = xx 來增加超時(shí)間隔。
以上這篇解決python讀取幾千萬行的大表內(nèi)存問題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Python StringIO模塊實(shí)現(xiàn)在內(nèi)存緩沖區(qū)中讀寫數(shù)據(jù)
- python監(jiān)控linux內(nèi)存并寫入mongodb(推薦)
- 用Python的Flask框架結(jié)合MySQL寫一個(gè)內(nèi)存監(jiān)控程序
- 使用Python獲取CPU、內(nèi)存和硬盤等windowns系統(tǒng)信息的2個(gè)例子
- python中查看變量?jī)?nèi)存地址的方法
- 談?wù)勅绾问謩?dòng)釋放Python的內(nèi)存
- Python深入學(xué)習(xí)之內(nèi)存管理
- 2款Python內(nèi)存檢測(cè)工具介紹和使用方法
- 淺談Python 對(duì)象內(nèi)存占用
- Python利用多進(jìn)程將大量數(shù)據(jù)放入有限內(nèi)存的教程
- Python內(nèi)存讀寫操作示例
相關(guān)文章
Pandas技巧分享之創(chuàng)建測(cè)試數(shù)據(jù)
學(xué)習(xí)pandas的過程中,為了嘗試pandas提供的各類功能強(qiáng)大的函數(shù),常常需要花費(fèi)很多時(shí)間去創(chuàng)造測(cè)試數(shù)據(jù),本篇介紹了一些快速創(chuàng)建測(cè)試數(shù)據(jù)的方法,需要的可以參考一下2023-07-07
Python bisect_left 函數(shù)使用場(chǎng)景詳解
在Python的編程世界中,數(shù)據(jù)處理和搜索操作是非常常見的任務(wù),bisect_left函數(shù)是Python標(biāo)準(zhǔn)庫bisect模塊中的一個(gè)強(qiáng)大工具,接下來,我們將詳細(xì)探討bisect_left函數(shù)的使用場(chǎng)景,需要的朋友可以參考下2024-11-11
Python字典fromkeys()方法使用代碼實(shí)例
這篇文章主要介紹了Python字典fromkeys()方法使用代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Django 拆分model和view的實(shí)現(xiàn)方法
今天小編就為大家分享一篇Django 拆分model和view的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08
python中numpy.empty()函數(shù)實(shí)例講解
在本篇文章里小編給大家分享的是一篇關(guān)于python中numpy.empty()函數(shù)實(shí)例講解內(nèi)容,對(duì)此有興趣的朋友們可以學(xué)習(xí)下。2021-02-02

