Django迁移错误_mysql_exceptions.ProgrammingError:(1064,“您的SQL语法有错误

McL*_*vin 1 python django virtualenv mysql-python python-3.x

TL; DR:python版本冲突,我认为我下载并编译的python(3.6)无法使用此包(libmysqlclient-dev)进行向mysql的迁移。只有系统的默认python(3.4)可以。

我的ubuntu服务器带有python 3.4,我所有的django工作和其他工作都依赖于3.6。我了解到升级系统python是一个坏主意,因此我编译了python 3.6(带有altinstall)。

当我运行python3.6 manage.py migrate它给我这个mysql错误:

_mysql_exceptions.ProgrammingError:(1064,“您的SQL语法有错误;请检查与MySQL服务器版本相对应的手册,以在第1行的'(6)NOT NULL)'附近使用正确的语法”)

我尝试虚拟环境和正常的Python 3.6,既给了同样的错误,而我确信,libmysqlclient-devmysqlclient安装。

就像这个答案所暗示的那样,问题出在哪里,libmysqlclient-dev因为它apt-get不是通过安装的,pip所以我猜它只与默认的python(系统随附的3.4)兼容,或者我编译的python 3.6不被允许使用,因为当我制作一个带有python3.4(系统默认值)的django虚拟项目,python3.6 manage.py migrate并以相同的用户尝试在相同的mysql数据库上运行,成功了!

再次:我的问题是手动编译的python 3.6无法使用,只有3.4可以libmysqlclient-dev安装apt-get

参考:迁移时的Django MySQL错误

更新 我想出了一个解决方法,但是效率不高。我将Django降级为2.0.9,并且(python manage.py migrate)正常运行。但是使用其他软件包可能会再次出现此问题。

小智 7

Django 2.1。*需要MySQL 5.6或更高版本。它通过映射DateTimeField到打破了兼容性datetime(6)

您可以修补Django MySQL数据类型映射器。将此放在您的顶部settings.py

from django.db.backends.mysql.base import DatabaseWrapper
DatabaseWrapper.data_types['DateTimeField'] = 'datetime' # fix for MySQL 5.5
Run Code Online (Sandbox Code Playgroud)