【发布时间】:2019-03-14 19:26:15
【问题描述】:
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。
正如this answer 建议的那样,问题出在libmysqlclient-dev 因为它是通过apt-get 而不是pip 安装的,所以我猜它只与默认的python(系统附带的3.4)或我编译的python 3.6 兼容不允许使用它,因为当我使用 python3.4(系统默认)创建一个虚拟 django 项目并尝试使用同一用户在同一个 mysql 数据库上 python3.6 manage.py migrate 时,它起作用了!
再次:我的问题是手动编译的python 3.6不能使用apt-get已经安装的libmysqlclient-dev,只有3.4可以
参考:Django MySQL error on migrate
更新
我想出了一个解决方法,但效率不高。我将 Django 降级到 2.0.9 并且它 (python manage.py migrate) 工作。但是这个问题可能会在使用不同的包时再次出现。
【问题讨论】:
-
您是否尝试过创建虚拟环境并在那里安装mysqlclient?
-
是的,我已经提到了
-
你用的是什么版本的mysql?似乎很有可能您拥有的版本不再受 Django 支持。
-
服务器版本:5.5.61-0ubuntu0.14.04.1 mysql --version: mysql Ver 14.14 Distrib 5.5.61,适用于使用 readline 6.3 的 debian-linux-gnu (x86_64)
标签: python django python-3.x virtualenv mysql-python