【问题标题】:Why mysql.connector works without problem with python2.7 and not with python3?为什么 mysql.connector 在 python2.7 和 python3 上没有问题?
【发布时间】:2020-04-12 14:57:05
【问题描述】:

我查看了不同的帖子,例如: Is there a way to use 'pool_reset_connection' from mysql-connector-python with MariaDB 10.4.7?

但我无法解决我的问题,我有一个用 python 2.7 编写的程序;现在我将所有内容都移至 python 3,但 mysql.connector 出现问题。

此时我正在使用 python 3.8.2 和 mysql-connector-python==8.0.19,但我尝试使用不同版本的 python 3,但是当我尝试时,我在 mysql.connector 上总是遇到相同的错误关闭连接。

Traceback (most recent call last):
  File "C:\Python38\lib\site-packages\mysql\connector\connection.py", line 819, in reset_session
    self.cmd_reset_connection()
  File "C:\Python38\lib\site-packages\mysql\connector\connection.py", line 1166, in cmd_reset_connection
    raise errors.NotSupportedError("MySQL version 5.7.2 and "
mysql.connector.errors.NotSupportedError: MySQL version 5.7.2 and earlier does not support COM_RESET_CONNECTION.

...
...

mysql.connector.errors.OperationalError: 1047 (08S01): Unknown command

我不知道如何解决它,我尝试以不同的方式增加池并拥有不同的池,或者只是关闭连接,但在我遇到池耗尽后的一个大项目中,所以我真的需要关闭连接,但我可以'不解决这个问题;有人可以帮我吗?

我什至尝试按照其他 stackoverflow 票证中的说明更改 mysql-connector 库,但每次更改时都会遇到其他问题。

【问题讨论】:

  • 我尝试降级但没有成功,我将尝试升级我的数据库,但到目前为止我尝试了不同的 mysql-connector-python 没有成功,唯一对我有用的是蟒蛇2.7。 Tks 提示
  • 看另一个问题,是关于mariadb而不是mysql。你在用 mariadb 吗?
  • 是的,我只是将它升级到最新版本 MariaDB10.4 并且我正在再次尝试,但在我拥有 10.1 之前,不超过旧......无论如何,如果不接触数据库,一切都可以使用 python2.7 : S 我使用的是 mysql-connector 2.1.6,在 python 3 中我试图安装相同版本的连接器,但即使文档说 python 3.4 具有 mysql-conmnector 2.1.6 也不允许我
  • @snakecharmerb 我刚刚将 MariaDB 升级到 10.4、python 8.2 和最新版本的 mysql-connector-python8.0.19 但我仍然遇到同样的问题:S
  • @snakecharmerb 我终于让它工作了,经过 3 天啊哈哈哈,而不是修复我只是尝试了一个名为 mariadb 的不同连接器,它不是从 mysql.connector 导入的:pypi.org/project/mariadbTKS 非常需要帮助和提示;)

标签: python python-3.x mariadb mysql-connector mysql-connector-python


【解决方案1】:

MySQL Connector/Python如何检测服务器版本是个问题:

由于复制不适用于 2 位主要版本号,MariaDB 使用了所谓的 RPL hack,它是在 10.0 版中引入的,并将以下版本号发送给客户端 5.5.5-10.4.13-MariaDB。另见What does the first part of the MariaDB version string mean

由于 MariaDB 连接器/Python 不知道,它假定服务器版本号为 5.5.5,并在检查 >= 5.7.3 时会引发 NotSupportedError 异常。

您可以修补 MySQL Connector/Python(在 do_handshake() 中修复 server_version),也可以尝试 MariaDB Connector/Python。它目前处于测试阶段,但预计本月仍会 GA (pip3 install mariadb)

【讨论】:

  • 我试图修复它,但它总是给我一个不同的问题,所以最后我找到了一个不属于 mysql-connector 的 mariadb 连接器:pypi.org/project/mariadb
  • 我知道 - 它是我写的 :-)
  • 我正在尝试修复服务器版本,因为使用 mariadb 连接器所有查询返回列表或元组而不是字典,所以我应该修复我的代码的许多部分......我得到了 _do_handshake()功能,当我打印 self._server_version 时,它一直给我(5,5,5),但我没有找到一种方法来改变它,否则它会失败......我应该如何改变它?为了什么?
  • 抱歉打扰你了,刚刚修复了它,它以两种方式工作,其他 mariadb 连接器或修复 mysql-connector ) tks 这么多
  • 我假设你的意思是 cursor(dictionary=True) ?是的,目前还不支持,但我们将在下一个版本(测试版)中实现
猜你喜欢
  • 1970-01-01
  • 2021-02-25
  • 2013-12-15
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
相关资源
最近更新 更多