Django 2 提示 mysqlclient 1.3.13 or newer is required 的解决办法

背景

博主在Kali Linux下面使用PyCharm开发Django项目的时候需要连接数据库,然而出现报错

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 1.3.10.
意思大概是Django需要更高版本的mysqlclient才行,我机器自带的版本过低,那么升级一下就OK了

执行pip的升级命令

sudo -H pip3 install -U mysqlclient
然而报错
OSError: mysql_config not found

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-ngjxo2y1/mysqlclient/

这个报错有点熟悉,我之前博文有遇到过,这里因该是缺少libmysqlclient的包,但是我使用apt search 却没有搜索到 libmysqlclient的软件包,倒是找到了 libmariadbclient 的包,直接安装

sudo apt-get install libmariadbclient-dev -y
然后再次执行升级操作
sudo -H pip3 install -U mysqlclient
顺利安装,然而在连接数据库的时候再次报错了,这次的错误就有点奇怪了
django.db.utils.OperationalError: (2000, 'Unknown MySQL error')
看起来像是Mysql的问题,难道是不允许连接或者是账号密码错误?直接使用终端连接看看
mysql -h 192.168.88.88 -u root -p 
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 4604
Server version: 5.7.27-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 
终端连接一切正常,这就有意思了,得想办法解决这个问题。

分析

既然终端连接没有问题,那问题因该是在mysqlclient上,刚刚我们是因为找不到libmysqlclient的包才安装了libmariadbclient的包,难道是还有其他东西忘记安装了?

我找到之前的博文,在这里 https://www.92ez.com/?action=show&id=23485,之前是安装的 libmysqlclient-dev,那应该是这里安装的不对了。

通过搜索引擎查找这两个包的差异,结果......一无所获!!!

这么看来好像又不是因为软件包的问题,不然早就被人提出来了。

就在这个时候我又仔细捉摸了一下,错误信息说的是 django.db.utils.OperationalError: ,那应该是在执行mysql的时候出现了问题,也是说连接应该是连接上了,只是执行出错。

想到这里,我重新打开Django项目的setting.py文件,找到数据库配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'project',
        'USER': 'project',
        'PASSWORD': 'pass',
        'HOST': '192.168.88.88',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"
        }
    }
}
仔细观察了一下,除了options,其他的都是必填,使用排除法,先保证基础参数正确,删掉最后一行后的代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'project',
        'USER': 'project',
        'PASSWORD': 'pass',
        'HOST': '192.168.88.88',
        'PORT': '3306'
    }
}
再次执行同步成功
python3 manage.py makemigrations
Migrations for 'PageApp':
  PageApp/migrations/0048_auto_20190816_1729.py
    - Remove field extra_code from template
    - Remove field enter_id from visiturllog
    - Remove field is_del from visiturllog

后记

那么最后一行是用来做啥的呢?哈哈哈,这个去看官方文档就知道了。

看来 libmariadbclient 跟 libmysqlclienth 还是有区别的,使用的时候需要注意二者的区别。

本文链接:https://www.92ez.com/?action=show&id=23500
!!! 转载请先联系non3gov@gmail.com授权并在显著位置注明作者和原文链接 !!! 小黑屋
提示:技术文章有一定的时效性,请先确认是否适用你当前的系统环境。

上一篇: Kali Linux 最新版给浏览器安装flash player
下一篇: 树莓派Kali更新系统报错 Error: missing /boot/firmware, did you forget to mount it? 的解决办法

访客评论
目前还没有人评论,您发表点看法?