作者:a104989195 | 来源:互联网 | 2022-12-02 16:55
如何解决《Django迁移错误_mysql_exceptions.ProgrammingError:(1064,“您的SQL语法有错误》经验,为你挑选了1个好方法。
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-dev
和mysqlclient
安装。
就像这个答案所暗示的那样,问题出在哪里,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
)正常运行。但是使用其他软件包可能会再次出现此问题。
1> 小智..:
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