MySQLdb 和 _mysql 版本不兼容:如何升级 _mysql

Posted

技术标签:

【中文标题】MySQLdb 和 _mysql 版本不兼容:如何升级 _mysql【英文标题】:MySQLdb and _mysql versions ncompatible: how to upgrade _mysql 【发布时间】:2016-06-21 14:18:57 【问题描述】:

我正在运行 mysqldb v1.2.3 并收到以下错误:

LookupError: unknown encoding: utf8mb4

This answer 建议将 MySQLdb 更新到 1.2.5 版本。我更新了,现在收到此错误:

ImportError: this is MySQLdb version (1, 2, 5, 'final', 1), but _mysql is version (1, 2, 3, 'final', 0)

我不确定如何更新_mysql 或这将如何改变我的设置。这只是一个 python 模块还是以某种方式连接到我的 MySQL 服务器?

编辑:我试过运行以下三种方法:

sudo pip uninstall mysql-python
sudo pip install mysql-python

sudo pip uninstall mysql-python
sudo pip install mysql-python==1.2.5

sudo pip install mysql-python --upgrade

卸载时我得到

/usr/local/lib/python2.7/dist-packages/_mysql.so
/usr/local/lib/python2.7/dist-packages/_mysql_exceptions.py
/usr/local/lib/python2.7/dist-packages/_mysql_exceptions.pyc
Proceed (y/n)? y
Successfully uninstalled MySQL-python-1.2.3

之后我无法导入MySQLdb_mysql,但重新安装总是给我_mysql 1.2.3 版。

第二次编辑/解决方案:原来_mysql 安装在服务器上的两个不同位置。如上所述,卸载/安装将_mysql 升级到v1.2.5,但每当我导入MySQLdb 时,都会优先考虑pip 未触及的_mysql 的另一个版本。

【问题讨论】:

看起来类似于问题***.com/a/27138539/2253302 @alexander.polomodov 看起来相似,但问题相反。该问题更新 MySQLdb 以匹配 _mysql,我正在尝试更新 _mysql 以匹配 MySQLdb(因为我需要特定版本的 MySQLdb)。与您发布的问题有很多类似的问题,但没有一个解决相反的问题。另请注意,该链接中的某些 cmets 也会寻求反向帮助。 所以,问题归结为“如何升级 MySQLdb?” 你用的是什么版本的mysql?文档解释了 _mysql 是什么 mysql-python.sourceforge.net/MySQLdb.html#mysql ,最后一个版本是几年前的。您应该查看 github 页面 github.com/farcepest/MySQLdb1。 dev.mysql.com/downloads/connector/python 也可能感兴趣 你在运行什么平台(Debian/red-hat linux?)这是系统依赖问题。 【参考方案1】:

根据user manual:

如果您想编写可跨数据库移植的应用程序,请使用 MySQLdb,并避免直接使用此模块。 _mysql 提供了一个主要实现 MySQL C API 的接口。有关更多信息,请参阅 MySQL 文档。这个模块的文档故意很弱,因为您可能应该使用更高级别的 MySQLdb 模块。

基本上,_mysql 是 MySQL C API 的面向对象的包装器。

This post 解释了如何使用 pip 来升级一个模块、一个模块及其所有依赖项或它们的任何组合。我认为,鉴于该声明,MySQLdb 不依赖于_mysql,并且它们没有一起升级。请访问共享的链接。

编辑:经过一番挖掘,我发现 Ubuntu 不能很好地支持 MySQL,只是 pip 不起作用。

所以我去了link 并做了:

apt-get install python-dev libmysqlclient-dev

做之前

sudo pip install MySQL-python

这对我很有效。对你来说,我认为你可能需要升级甚至 apt-get remove 然后重新安装上述两个 Ubuntu 模块 python-devlibmysqlclient-dev

对我来说,第一次安装时它现在可以工作了;转到终端并输入 python 解释器,然后键入:

import MySQLdb
MySQLdb.__version__    #I got '1.2.5'
import _mysql
_mysql.__version__    #Again, I got '1.2.5'

【讨论】:

我试过运行--upgrade,我试过卸载并重新安装。总是 MySQLdb 1.2.5 和 _mysql 1.2.3。请参阅原始帖子中的编辑。 好的,我想我已经找到了解决方案。请看我的回答。 这就是我担心的问题,会遇到很长的依赖关系。我对重新安装python-devlibmysqlclient-dev 犹豫不决。卸载MySQLdb 卸载_mysql,同样,安装MySQLdb 安装_mysql,这让我觉得它独立于你提到的两个包。我可以安装任何版本的MySQLdb,但由于某种原因,我总是得到_mysql 的v1.2.3。 解决了问题,请参阅我上面的编辑。感谢您的帮助,我会给您奖励。 啊,我明白了。我打算提出这样的论点,即升级最适合依赖关系,更稳定,未来的麻烦更少yadayadayada,但很高兴你找到了解决方案:)

以上是关于MySQLdb 和 _mysql 版本不兼容:如何升级 _mysql的主要内容,如果未能解决你的问题,请参考以下文章

ImportError: 这是 MySQLdb 版本 (1, 2, 4, 'beta', 4),但 _mysql 是版本 (1, 2, 5, 'final', 1)

Python 访问 MySQL 数据库可以使用哪些第三方实现?

如何使用Python3.4连接MySQL

如何给 Python 的 MySQLDB 模块增加 Timeout 超时功能

Ubuntu中的Python-MySQLdb错误

python怎么连接mysql数据库