学院门户网站建设自评,可以做pos机的网站,微信开放平台文档,网站定位授权开启权限怎么做文章目录 错误一错误原因解决方案 错误二原因解决方案 我自己知道的#xff0c;这类问题有两类原因#xff0c;两种解决方案。 错误一
错误原因
pymysql的主进程启动的connect无法给子进程中使用#xff0c;所以读取大批量数据时最后容易出现了此类问题。
解决方案
换成… 文章目录 错误一错误原因解决方案 错误二原因解决方案 我自己知道的这类问题有两类原因两种解决方案。 错误一
错误原因
pymysql的主进程启动的connect无法给子进程中使用所以读取大批量数据时最后容易出现了此类问题。
解决方案
换成pymysql-pool可以解决方法 具体如下
pip install pymysql-pool代码如下
import pymysql
import pymysqlpooldef select_ebay_catelotory():config{host: HOST, user: USER, password: PASSWD, database: DB, autocommit:True}pool1 pymysqlpool.ConnectionPool(size10, maxsize20, pre_create_num2, namepool1, **config)con1 pool1.get_connection()gcu con1.cursor()try:gcu.execute(fSELECT *** )# 获取剩余结果所有数据rows gcu.fetchall()except Exception as e:print(e)finally:# gcu.close()con1.close()return rows错误二
原因
要读取的内容太大了。有两类某列太长了总行数太多了。
如何确定 你的代码读取100行没问题1000行也没问题10000行也没问题100万行就有问题了。那就是这个原因。
解决方案
不要limit去读太费时间先取id再用id去分批读取数据。
import pymysql
import pymysqlpooldef select_all_ids():config{host: HOST, user: USER, password: PASSWD, database: DB, autocommit:True}pool1 pymysqlpool.ConnectionPool(size35, maxsize35, pre_create_num2, namepool1, **config)con1 pool1.get_connection()gcu con1.cursor()try:gcu.execute(fSELECT id FROM sfc_minesweeper.product_detail WHERE create_time2024-07-10 AND CHAR_LENGTH(result_data)500)# 获取剩余结果所有数据rows gcu.fetchall()except Exception as e:print(e)finally:# gcu.close()con1.close()return rowsdef select_ebay_catelotory(pids):config{host: HOST, user: USER, password: PASSWD, database: DB, autocommit:True}pool1 pymysqlpool.ConnectionPool(size35, maxsize35, pre_create_num2, namepool1, **config)con1 pool1.get_connection()gcu con1.cursor()try:gcu.execute(fSELECT id, result_data, product_offer_id FROM sfc_minesweeper.product_detail WHERE id in {tuple(pids)})# 获取剩余结果所有数据rows gcu.fetchall()except Exception as e:print(e)finally:# gcu.close()con1.close()return rows# 先拿到所有id
pd_ids [e[0] for e in select_all_ids()]
# 再分批读取
pd1688s []
step 4000
for begin in range(0, len(pd_ids), step):pd1688s.extend([e for e in select_ebay_catelotory(pd_ids[begin:beginstep])])print(i, len(pd1688s))