python操作mysql千万条数据时,输出乱码和读写若干问题

本文探讨了在Python中处理大规模数据库(如3000万条记录)的有效方法,重点介绍了流式游标的使用,包括MySQLdb和pymysql的不同游标类型,以及如何避免内存溢出和乱码问题。

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

python读取mysql数据库时,数据量很大的时候(本次实验数据量3000多万条),可以使用流式游标。具体思想如下:使用工具是MySQLdb的流式游标(MySQLdb.cursors.DictCursor),也可以采用SScursor(pymysql.cursors.SScursor)。扩充一点,python的游标有四种(Cursor,SSCursor,DictCursor,SSDictCursor)需要注意的是前两种游标返回值是元组,后面两种游标返回值是字典,需要根据不同的返回值类型对返回值做处理。本次实验中有几个坑需要注意一下:

1,取值时使用fetchone还是fetchall?

如果应对的数据量不大的情况下使用fetchall,但是本人这次实验数据是3000多万条,所以使用fetchone。因为fetchall会把所有据读入内存,造成宕机。

2,fetchone读取的数据print的时候显示都是u'\xxx类型的乱码?

有关乱码原因很多,但是说一个基本乱码调节思路:数据库编码:show variables like 'character_set_database',查看所有字段编码:show full columns from ****(表名)确认数据表编码格式和连接方式MySQLdb.connect()的连接charset设置一致。这种情况下,还是显示u'\xxxx,这种显示,显示的是Unicode码,并不是乱码,这是因为python默认的编码是ascii编码,还有输出框console的编码,这要这几个都保持一致,就不会出错。如果想看着顺眼一些,有两个解决办法:①,使用python3,python3有效的解决了这个问题。②python2的话,可以使用str().decode('unicode_escape'),这样可以把Unicode码表显示为中文。但是写入文件的话,不用管只要你确定你的python加了# -*-coding:utf-8 -*-和连接charset一致,这样写入文件基本不会出现乱码。

3,fetchone方法取出数据后,读取时各种报错keyerror?

请根据返回值类型来读取值。如果是元组,请用元组的遍历方式(元组[0],元组[1])取值。如果是字典,请用字典的遍历方式取值(字典['字段名字1'],字典['字段名字2']),等方式来取值。

目前就这么多,出问题再补充吧

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值