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
and mysqlclient
已安装。
as 这个答案表明,问题在于libmysqlclient-dev
因为它是通过安装的apt-get
not pip
所以我猜它只与默认的python(系统自带的3.4)兼容,或者我编译的python 3.6不允许使用它,因为当我用python3.4(系统默认的)创建一个虚拟的django项目并尝试时python3.6 manage.py migrate
在同一个用户的同一个mysql数据库上,它工作了!
再次:我的问题是手动编译的 python 3.6 无法使用libmysqlclient-dev
已安装apt-get
,只有3.4可以
参考:Django MySQL 迁移时出错
UPDATE我想出了一个解决办法,但效率不高。我将 Django 降级到 2.0.9 并且它(python manage.py migrate
)工作了。但使用不同的包可能会再次出现此问题。
Django 2.1.* 需要 MySQL 5.6 或更高版本。它通过映射破坏了兼容性DateTimeField
to datetime(6)
.
您可以修补 Django MySQL 数据类型映射器。把这个放在你的顶部settings.py
from django.db.backends.mysql.base import DatabaseWrapper
DatabaseWrapper.data_types['DateTimeField'] = 'datetime' # fix for MySQL 5.5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)