pymysql TypeError: object supporting the buffer API required

使用python语言,通过pymysql库访问mysql数据库(别问我为什么不用orm框架,有些时候orm框架真的不如原生态的sql好用),在我本机运行是ok的,但在另一同事机器运行失败,报错如下:

Traceback (most recent call last):
  File "D:/work//scripts/main.py", line 25, in <module>
    biz_service.initialize("./config/config.yaml")
  File "D:\work\\scripts\biz\sync_security_service.py", line 57, in initialize
    password=self._config.mysql.password,db=self._config.mysql.database)
  File "D:\work\scripts\env\lib\site-packages\pymysql\__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
  File "D:\work\scripts\env\lib\site-packages\pymysql\connections.py", line 325, in __init__
    self.connect()
  File "D:\work\scripts\env\lib\site-packages\pymysql\connections.py", line 599, in connect
    self._request_authentication()
  File "D:\work\scripts\env\lib\site-packages\pymysql\connections.py", line 817, in _request_authentication
    authresp = _auth.scramble_native_password(self.password, self.salt)
  File "D:\work\scripts\env\lib\site-packages\pymysql\_auth.py", line 39, in scramble_native_password
    stage1 = sha1_new(password).digest()
  File "D:\work\scripts\env\lib\hashlib.py", line 149, in __hash_new
    return _hashlib.new(name, data)
TypeError: object supporting the buffer API required

   开始以为是python版本和pymysql版本的问题,后来换成一样的版本,还是报错!!!!从上面的日志其实可以很清楚的看到错误的函数:sync_security_service.py的第57行(不得不说,详细的错误日志及堆栈是个好东东),而57行就是:

self._connect=pymysql.connect(host=self.mysql.ip,port=self.mysql.port,
                             user=self.mysql.user,password=self.mysql.password,
                             db=self.mysql.database)

于是决定跟踪pymysql.connect函数到底干了什么~~~

在跟踪的过程中,偶然发现:self.mysql.password是一个整型,竟然是一个整型,密码应该是字符串类型,怎么会是整型呢?原来同事的密码是一串数字123456,python在读配置文件过程中默认把123456转成了整型,修改如下:

self._connect=pymysql.connect(host=self.mysql.ip,port=self.mysql.port,
                             user=self.mysql.user,password=str(self.mysql.password),
                             db=self.mysql.database)

再次运行,发现问题解决。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ztenv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值