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

9

我正在运行MySQLdb v1.2.3,并且遇到以下错误:

LookupError: unknown encoding: utf8mb4

这个回答建议更新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。


类似于问题https://dev59.com/roXca4cB1Zd3GeqPH2l8#27138539的外观 - alexander.polomodov
@alexander.polomodov 看起来很相似,但问题是相反的。那个问题更新了MySQLdb以匹配_mysql,我正在尝试更新_mysql以匹配MySQLdb(因为我需要特定版本的MySQLdb)。有许多类似于您发布的问题,但没有一个解决相反的问题。还要注意,该链接中的一些评论也请求帮助解决相反的问题。 - Sal
那么,问题归结为“我如何升级MySQLdb?” - Rick James
你使用的是哪个版本的mysql?文档解释了什么是_mysql,可以在mysql-python.sourceforge.net/MySQLdb.html#mysql中找到,最后一个版本已经发布了几年。你应该查看github页面https://github.com/farcepest/MySQLdb1。此外,https://dev.mysql.com/downloads/connector/python/也可能会引起你的兴趣。 - Padraic Cunningham
你正在使用哪个平台(Debian/Red Hat Linux)?这是一个系统依赖性问题。 - Maresh
MySQL版本:mysql Ver 14.14 Distrib 5.5.46,Ubuntu 14.04.2 LTS - Sal
2个回答

2
根据用户手册
如果您想编写可在多个数据库间移植的应用程序,请使用MySQLdb,避免直接使用此模块。_mysql提供了一个接口,大多数实现了MySQL C API。有关更多信息,请参阅MySQL文档。此模块的文档故意较弱,因为您可能应该使用更高级别的MySQLdb模块。
基本上,_mysql是MySQL C API的面向对象封装器。 这篇文章解释了如何使用pip升级一个模块、带有所有依赖项的模块或任何组合。我认为,根据声明,MySQLdb没有依赖于_mysql,并且它们没有一起升级。请访问共享的链接。
编辑:经过一些挖掘,我发现Ubuntu不支持MySQL,只有pip是不起作用的。
所以我去了这个链接并执行了以下操作: apt-get install python-dev libmysqlclient-dev 然后再执行 sudo pip install MySQL-python 对我来说,这很好用。对于您,我认为您需要升级甚至是apt-get删除,然后重新安装上述两个Ubuntu模块python-devlibmysqlclient-dev
对我来说,在第一次安装时它现在可以工作了;转到终端并进入Python解释器,然后键入:
import MySQLdb
MySQLdb.__version__    #I got '1.2.5'
import _mysql
_mysql.__version__    #Again, I got '1.2.5'

1
我已尝试运行 --upgrade 命令,并尝试卸载并重新安装。但是始终使用的是MySQLdb 1.2.5和 _mysql 1.2.3版本。请参见原帖中的编辑说明。 - Sal
好的,我想我已经找到了解决方案。请查看我的答案。 - Abhishek Divekar
这就是我担心的,要走下一长串依赖关系。我不愿意重新安装python-devlibmysqlclient-dev。卸载MySQLdb会卸载_mysql,同样地,安装MySQLdb会安装_mysql,这让我认为它与你提到的两个软件包是独立的。我能够安装任何版本的MySQLdb,但出于某种原因,我总是得到_mysql的v1.2.3版本。 - Sal
问题已经解决,详见我上面的编辑。感谢您的尝试帮助,我会给您发放奖金以示鼓励。 - Sal
啊,我明白了。我原本想要提出升级是为了依赖项更好、更稳定,以及减少未来的麻烦等等的论点,但很高兴你找到了解决方案 :) - Abhishek Divekar

0
原来在服务器上安装了两个不同位置的_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

我随后将_mysql升级到v1.2.5,但每当我导入MySQLdb时,优先考虑的是另一个版本的_mysql,而这个版本并没有被pip触及。


这个答案是由OP Sal 在CC BY-SA 3.0下发布的,作为对问题MySQLdb和_mysql版本不兼容:如何升级_mysql编辑


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接