Django-安装mysqlclient错误:需要mysqlclient 1.3.13或更高版本;你有0.9.3

Mis*_*ing 18 mysql django version

我已经搜寻了论坛,但是找不到答案,甚至找不到任何文档。

运行命令时:

python manage.py inspectdb
Run Code Online (Sandbox Code Playgroud)

我收到错误:

mysqlclient 1.3.13 or newer is required; you have 0.9.3
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有建议的修复程序,包括:-升级pip-安装不同的滚轮(32位而不是64位),即使用命令pip install mysqlclient-1.4.2- mysqlclient-1.4.2-cp37-cp37m-win32.whl。 cp37-cp37m-win32.whl(这可以正常工作,没有错误,但不执行所需的工作!)

我的目标是简单地将旧版mysql数据库(在XAMPP和myphpadmin中运行)连接到Django。我遵循的文档遗漏了安装mysqlclient的需要,并且在这一点上遇到了麻烦。

Wis*_*hou 74

我猜你的项目使用 pymysql 而不是 mysqlclient。

您可以尝试在您的项目中搜索以下代码片段。如果找到,请尝试以下方法解决此问题:

import pymysql
pymysql.install_as_MySQLdb()
Run Code Online (Sandbox Code Playgroud)

在这两者之间插入一行代码,使其看起来像这样:

import pymysql
pymysql.version_info = (1, 3, 13, "final", 0)
pymysql.install_as_MySQLdb()
Run Code Online (Sandbox Code Playgroud)

然后尝试开始您的项目。

  • 为什么我知道你在使用 pymysql?因为 0.9.3 只是 pymysql 的最新版本。
  • 为什么在项目中使用 pymysql 而不是 mysqlclient?因为它更容易安装。pymysql不依赖系统库,而mysqlclient依赖libmysqlclient-dev等一系列系统库。
  • 为什么mysqlclient难安装,Django默认还在用?因为 mysqlclient 速度更快,性能更好。所以如果你的项目对性能要求比较高,建议你去掉上面的兼容代码,在你的项目中安装mysqlclient。如果您在安装 mysqlclient 过程中需要帮助,请参考此链接: 如何使用 pip 安装 Python MySQLdb 模块?,并确保libssl-dev之前已安装pip install mysqlclient

  • 截至今天,我发现您需要以这种方式将版本更新为“1.4.2”。```pymysql.version_info = (1, 4, 2, "最终", 0)``` (6认同)

Die*_*ães 38

This is how I fixed it.

Go to your django/db/backends/mysql installation dir. Check your path in the error message.

I'm using pipenv so my path is:

/home/username/.local/share/virtualenvs/project-env/lib/python3.7/site-packages/django/db/backends/mysql

Open file base.py and search for:

version = Database.version_info
Run Code Online (Sandbox Code Playgroud)

Put a pass inside if and comment line:

raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.version)

Like this.

if version < (1, 3, 13):
   pass
   '''
   raise ImproperlyConfigured(
       'mysqlclient 1.3.13 or newer is required; you have %s.'
       % Database.__version__
   )
   '''
Run Code Online (Sandbox Code Playgroud)

Save, close this file and open operations.py.

Search for:

query = query.decode(errors='replace')
Run Code Online (Sandbox Code Playgroud)

and change decode to encode

query = query.encode(errors='replace')
Run Code Online (Sandbox Code Playgroud)

Now, try to run the server.

  • 这可行,但是还有其他方法吗?我的意思是如何在无法访问这些文件的真实服务器上修复它。 (2认同)
  • 使用django的@KrishnadasPC真实服务器将有权访问这些文件。我在容器中运行django,并通过将“ Database.version_info”替换为“(2,0,0)”来跳过if语句引发加薪的情况,从而绕过了这个问题。bash脚本如下所示:`sed -i“ s / Database.version_info /(2,0,0)/ g” /usr/local/lib/python3.6/site-packages/django/db/backends/mysql/ base.py` (2认同)

小智 8

由于pymysql安装了较低版本的 mysqlclient ,我遇到了同样的问题。

操作系统:Linux Mint 19.1

蟒蛇:3.6.8

姜戈:2.2.2

  1. 卸载mysqlclient: pip3 uninstall mysqlclient
  2. 卸载pymysql: pip3 uninstall pymysql
  3. 安装mysql客户端: pip3 install mysqlclient


小智 6

默认情况下在pycharm中创建Django项目时会出现此问题。这是由于django的默认版本是2.2.6造成的,所以只需将django版本降级到2.1.7,终端错误就消失了。

pip install Django==2.1.7
Run Code Online (Sandbox Code Playgroud)

就这样!


小智 6

它对我来说工作得很好,只需打开 settings.py 并包含

 import pymysql
 pymysql.version_info = (1, 4, 6, 'final', 0)
 pymysql.install_as_MySQLdb()
Run Code Online (Sandbox Code Playgroud)