python 读取mysql大量数据处理_Python 频繁读取Mysql相关问题

本文探讨了MySQL性能优化的方法,包括减少查询结果集大小、处理大数据插入问题及存储Python list类型的策略。同时介绍了使用Python进行高效数据库操作的多线程实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、需要频繁select大量数据,时间长、消耗内存大,如何解决mysql性能问题?

如果对返回的结果数量没有要求,可以控制返回的数量:

cursor.fetchmany(size=1000)

这样是只返回1000条数据,如果返回的结果小于size,则返回所有数据;

如果你只需要一条,则更简单:fetchone()

2、每次插入的数据过大,MySQL server has gone away 如何解决?

存储为blob类型;

修改my.conf里:max_allowed_packet = 500m

3、要把python的list类型存入mysql,然后下次还需要以list格式读取,如何操作?

因为list类型里包含半角的逗号,或插入的数据里包含特殊符号,则不能正常插入mysql。

Google里有很多方法,我采取的是base64。将要插入的数据base64 encode可以正常存入Mysql。

base64str = base64.b64encode(str(mysqlstr))

mysqlstr = base64.b64decode(b64str)

注意:当你读取的时候,需要base64decode,这时得到的是str,则不能正常使用list序列取值。怎么办?

eval(string)

如上操作,eval可以很好的解决这个问题,把str变成tuple,就可以直接用了。

4、频繁操作Mysql更删查数据时,最好采用多线程操作数据库,避免因为my.conf配置问题带来的麻烦。

下面是一个Mysql多线程操作类:

1 classMYSQL:2 def __init__(self,sql):3 self.sql =sql4 self.conn = MySQLdb.connect(charset='utf8',user='yourname',passwd='passwd',db='your dbname')5 self.cursor =self.conn.cursor()6

7 definsert(self):8 self.cursor.execute(self.sql)9 self.conn.commit()10 self.cursor.close()11 self.conn.close()12 returnTrue13

14 defselect(self):15 self.cursor.execute(self.sql)16 alldata =self.cursor.fetchall()17 self.cursor.close()18 self.conn.close()19 returnalldata20

21 defupdate(self):22 self.cursor.execute(self.sql)23 self.conn.commit()24 self.cursor.close()25 self.conn.close()26 return True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值