Python2转Python3时_mysql.connection无cursor属性问题求助
解决Python3迁移中
_mysql.connect()无cursor属性的问题 嘿,这个问题我在帮团队做Python2到3迁移的时候碰到过,其实根源在于Python3里的_mysql模块(MySQL-python的底层实现)和Python2的API已经发生了变化,而且_mysql本身就是个底层模块,并不推荐直接在业务代码里使用——先给你两个解决方案,从简单到规范:
方案1:直接适配_mysql的Python3用法
在Python3的_mysql中,获取游标不再是调用连接对象的cursor()方法,而是需要用模块级别的create_cursor()函数,把你的连接对象传进去:
import _mysql as mc db = mc.connect(host="localhost", user="root", passwd="password1234") # 用模块的create_cursor方法创建游标,传入连接对象 cursor = mc.create_cursor(db)
不过要注意,_mysql的API在Python3里还有其他兼容性坑(比如字符串编码、返回值类型),如果只是临时过渡可以用这个方法,但不建议长期依赖。
方案2:切换到标准DB API 2.0兼容库(推荐)
更稳妥的方式是改用mysqlclient——它是MySQL-python的Python3分支,完全兼容Python2时代的用法,几乎不需要修改你的原有代码:
- 先安装mysqlclient:
pip install mysqlclient
- 修改你的代码(只需要把导入模块改了就行):
import MySQLdb # 替换原来的import _mysql as mc db = MySQLdb.connect(host="localhost", user="root", passwd="password1234") cursor = db.cursor() # 这句代码完全不用改!
它完全遵循DB API 2.0标准,后续维护和扩展都会省心很多,也是Python3操作MySQL的主流选择之一。
另外补充一句:你提到的“将对象转为Connection类型”其实没必要,因为_mysql.connect()返回的就是它自己的连接对象类型,只是Python3里这个类型的API和Python2不一样了,不是类型转换的问题,是用法变了。
内容的提问来源于stack exchange,提问作者Foyman
相关产品推荐
相关产品推荐

