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主機位址,若...