pymysql流式游標

2021-10-02 09:56:04 字數 1277 閱讀 7231

python通過pymysql操作向mysql讀取千萬、百萬級別的資料庫時

如果用傳統的fetchall()fetchone()方法,都是先預設在記憶體裡快取下所有行然後再處理,大量的資料會導致記憶體資源消耗光,記憶體容易溢位

此時則建議使用sscursor(流式游標),避免客戶端占用大量記憶體

這個 cursor 實際上沒有快取下來任何資料,它不會讀取所有所有到記憶體中,它的做法是從儲存塊中讀取記錄,並且一條一條返回給你,使用迭代器而不用 fetchall ,即省記憶體又能很快拿到資料

例:

def

select_pan_url

(self)

: db = pymysql.connect(host=

'localhost'

, port=

3306

, user=

'root'

, passwd=

'', db='')

cursor = db.cursor(cursor=pymysql.cursors.ssdictcursor)

select_sql =

"select `name`, `detail_url`, `pan_title`, `pan_psw`, `pan_real_url` from agepan_wj"

try:

cursor.execute(select_sql)

# 在處理大量資料時可以分割進行

datas = cursor.fetchall(

)for pan in datas:

except exception as e:

print

('取資料失敗'

, e)

db.rollback(

)finally

: cursor.close(

) db.close(

)

需要注意的是:

因為sscursor是沒有快取的游標,結果集只要沒取完,這個connect是不能再處理別的sql,包括另外生成乙個cursor也不行的,如果需要幹別的,請另外再生成乙個連線物件

每次讀取後處理資料要快,不能超過 60 s,否則mysql將會斷開這次連線

也可以修改set net_write_timeout = xx來增加超時間隔

pymysql語法 pymysql用法

pymysql用法 一 基礎用法 匯入 import pymysql 連線資料庫 conn pymysql.connect host user password database 建立游標 cur conn.cursor 括號內沒有任何設定 查詢後輸出的結果是元組形式 括號內新增cursor pym...

pymysql語法 pymysql的用法

一 首先要安裝mysql,我安裝的mysq5.7的 二 啟動mysql,啟動 net start mysql 停止 net stop mysql 解除安裝 net delete mysql 三 安裝pymysql模組 pip直接安裝即可 四 基本的增刪改查的操作 coding utf 8 impor...

pymysql語法 pymysql庫常用物件用法

pymysql庫中提供了兩個常用的物件 connection物件和cursor物件。1.connection物件 connection物件用於建立與mysql資料庫的連線,可以通過以下方法建立 connect 引數列表 以上方法中的常用引數及其含義如下 引數host,資料庫所在主機的ip主機位址,若...