You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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时代的用法,几乎不需要修改你的原有代码:

  1. 先安装mysqlclient:
pip install mysqlclient
  1. 修改你的代码(只需要把导入模块改了就行):
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:55:13