pymysql停止工作:NameError:未定义名称"byte2int"

nsj*_*ani 9 python-3.x pymysql

我在Python中使用pymysql连接到数据库.它工作正常,但现在我得到了以下error:

Traceback(最近一次调用最后一次):

  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/connections.py", line 327, in __init__
    self.connect()
  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/connections.py", line 598, in connect
    self._request_authentication()
  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/connections.py", line 865, in _request_authentication
    data = _auth.scramble_old_password(self.password, self.salt) + b'\0'
  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/_auth.py", line 72, in scramble_old_password
    hash_pass = _hash_password_323(password)
  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/_auth.py", line 97, in _hash_password_323
    for c in [byte2int(x) for x in password if x not in (' ', '\t', 32, 9)]:
  File "/Users/njethani/Desktop/venv/lib/python3.6/site-packages/pymysql/_auth.py", line 97, in <listcomp>
    for c in [byte2int(x) for x in password if x not in (' ', '\t', 32, 9)]:
NameError: name 'byte2int' is not defined
Run Code Online (Sandbox Code Playgroud)

我使用以下行连接到我的数据库(连接字符串):

conn = pymysql.Connect(host='hostname', port=3306, user='username', passwd='password', db='mysql')
Run Code Online (Sandbox Code Playgroud)

sta*_*tti 5

由于 pymysql 维护者拒绝发布修复程序,解决方案只是安装旧版本的软件包:

pip3 install --user 'pymysql<0.9'
Run Code Online (Sandbox Code Playgroud)


小智 1

我遇到了同样的错误,看起来 _auth.py 无法找到 byte2int 的引用。我添加了以下行来修改 _auth.py 以使其正常工作。

从 util 导入 byte2int,int2byte

请注意 util.py 是 pymysql 的,因为其他包中也会有 util.py 文件。

  • @JulianCamilleri 不幸的是,我认为这些更改尚未发布到 pypi。 (2认同)