先说环境:
python是3.6,Django是2.2,数据库是mariadb10.3
Django的官方文档里给出了连接mysql/mariadb数据库的两种方式:
1. mysqlclient 开源产品
2. mysql connector/python oracle公司的产品
我去翻了一下mysqlclient的安装说明,作者很明确的说了这个项目在Mac机器上bug,我就没再继续看下去,不知道到底是啥bug,反正我对速度没有太高的要求,用纯python的实现更方便一些
也怪我太浪......我没去使用oracle公司的东西,而是选择了另外一个纯python实现,叫做pymysql
顺利引入pymysql,import pymysql; pymysql.install_as_mysqlclient()后,在settings.py文件中添加数据库连接设置时,问题来了
程序报错,提示 “mysqlclient 1.3.13 or newer is required; you have 0.9.3.”
我查了一下pymysql的最新版本,GitHub上的确是0.9.3,大写的尴尬
我抱着先跑起来的打算,根据报错信息追踪到了抛出异常的文件
/path/to/your/python-version/lib/site-packages/django/db/backends/mysql/base.py
找到:
这里是一个简单判断,如果version < 1.3.13直接抛出异常,我注释掉了这两行
但是问题还没完,数据库的确是连上了,但当我试着创建自定义model并python manage.py migrate时,问题又来了
这次报错是:attributeerror 'str' object has no attribute 'decode'
到了这种地步,我已经准备尝试换oracle公司的库了,抱着死也要死个明白的心理,追踪到这个报错文件的位置
/path/to/your/python-version/lib/site-packages/django/db/backends/mysql/oprations.py
找到:
这个是我修改过的,以前是
[Python] 纯文本查看 复制代码 if query is not None:
query = query.decode(errors='replace')
这第二个异常,我觉得不仅仅是pymysql的问题,很可能mysql connector/python 也会出现这样的异常
记录下来,以备日后查找
|