Ошибка переноса Django _mysql_exceptions.ProgrammingError: (1064, «В синтаксисе SQL есть ошибка - PullRequest
0 голосов
/ 10 октября 2018

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, на предмет правильного синтаксиса для использования рядом с '(6) NOT NULL)' в строке 1")

Я попробовал виртуальную среду и обычный Python 3.6, оба выдавали одну и ту же ошибку, и я убедился, что установлены libmysqlclient-dev и mysqlclient.

как этот ответ предполагает, что проблема в libmysqlclient-dev, потому что он установлен через apt-get, а не pip, поэтому я думаю, что он совместим только с Python по умолчанию (3.4, который поставляется с системой), или мой скомпилированный Python 3.6 не разрешениспользовать его, потому что, когда я сделал фиктивный проект django с python3.4 (по умолчанию системы) и попытался python3.6 manage.py migrate в той же базе данных mysql с тем же пользователем, это сработало!

СНОВА: моя проблема в том, чтовручнуюСкомпилированный Python 3.6 не может использовать libmysqlclient-dev, который был установлен apt-get, только 3.4 может

ссылка: Ошибка Django MySQL при переносе

ОБНОВЛЕНИЕ Я придумал обходной путь, но он не эффективен.Я понизил Django до 2.0.9, и это (python manage.py migrate) сработало.но эта проблема может появиться снова с другим пакетом.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

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
0 голосов
/ 14 ноября 2018

Существует большая разница в поддержке django 2.0.* против django 2.1.*

AS на Django 2.0. * MySQL Notes

Поддержка DjangoMySQL 5.5 и выше.

Согласно Django 2.1. * MySQL Notes

Django поддерживает MySQL 5.6 и выше.

Проверьте версию MySQL: mysql -V и используйте правильную версию django.

...