gpt4 book ai didi

python - Django migrate error _mysql_exceptions.ProgrammingError : (1064, "你的SQL语法有错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:58:44 25 4
gpt4 key购买 nike

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, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL)' at line 1")

我尝试了虚拟环境和普通的 python 3.6,都给出了同样的错误,我确保安装了 libmysqlclient-devmysqlclient

作为this answer建议,问题出在 libmysqlclient-dev 因为它是通过 apt-get 安装的,而不是 pip 所以我猜它只与默认的 python 兼容( 3.4 系统附带的)或我编译的 python 3.6 不允许使用它,因为当我用 python3.4(系统默认)创建一个虚拟 django 项目并尝试 python3.6 manage.py migrate 在同一个用户的同一个 mysql 数据库上,成功了!

AGAIN:我的问题是手动编译的python 3.6不能使用apt-get安装的libmysqlclient-dev,只有3.4可以

引用:Django MySQL error on migrate

更新我想出了一个变通办法,但效率不高。我将 Django 降级到 2.0.9,它(python manage.py migrate)工作正常。但是这个问题可能会再次出现在不同的包中。

最佳答案

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

关于python - Django migrate error _mysql_exceptions.ProgrammingError : (1064, "你的SQL语法有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52730817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com