@vasy7991

Как избавиться от ошибки 1064 You have an error in your SQL syntax?

Нужно создать модели в Django на основе уже имеющейся БД mysql. Бд находиться на heroku, создал её с помощью плагина CleardDB. Модели создаю с помощью команд:
python manage.py inspectdb
python manage.py inspectdb> models.py
python manage.py migrate

Однако при выполнении командыpython manage.py migrate получаю ошибку:
_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")

Как избавиться от данной ошибки?
Вот полный трейсбек:
(diploma_project) C:\Users\admin\diploma_project\geomagnet>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, task1
Running migrations:
Traceback (most recent call last):
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\backends\utils.py", line 82, in _execute
    return self.cursor.execute(sql)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\backends\mysql\base.py", line 71, in execute
    return self.cursor.execute(query, args)
  File "C:\Users\admin\diploma_project\lib\site-packages\MySQLdb\cursors.py", line 250, in execute
    self.errorhandler(self, exc, value)
  File "C:\Users\admin\diploma_project\lib\site-packages\MySQLdb\connections.py", line 50, in defaulterrorhandler
    raise errorvalue
  File "C:\Users\admin\diploma_project\lib\site-packages\MySQLdb\cursors.py", line 247, in execute
    res = self._query(query)
  File "C:\Users\admin\diploma_project\lib\site-packages\MySQLdb\cursors.py", line 412, in _query
    rowcount = self._do_query(q)
  File "C:\Users\admin\diploma_project\lib\site-packages\MySQLdb\cursors.py", line 375, in _do_query
    db.query(q)
  File "C:\Users\admin\diploma_project\lib\site-packages\MySQLdb\connections.py", line 276, in query
    _mysql.connection.query(self, query)
_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")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\migrations\recorder.py", line 67, in ensure_schema
    editor.create_model(self.Migration)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\backends\base\schema.py", line 307, in create_model
    self.execute(sql, params or None)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\backends\base\schema.py", line 137, in execute
    cursor.execute(sql, params)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\backends\utils.py", line 99, in execute
    return super().execute(sql, params)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\backends\utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\backends\utils.py", line 82, in _execute
    return self.cursor.execute(sql)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\backends\mysql\base.py", line 71, in execute
    return self.cursor.execute(query, args)
  File "C:\Users\admin\diploma_project\lib\site-packages\MySQLdb\cursors.py", line 250, in execute
    self.errorhandler(self, exc, value)
  File "C:\Users\admin\diploma_project\lib\site-packages\MySQLdb\connections.py", line 50, in defaulterrorhandler
    raise errorvalue
  File "C:\Users\admin\diploma_project\lib\site-packages\MySQLdb\cursors.py", line 247, in execute
    res = self._query(query)
  File "C:\Users\admin\diploma_project\lib\site-packages\MySQLdb\cursors.py", line 412, in _query
    rowcount = self._do_query(q)
  File "C:\Users\admin\diploma_project\lib\site-packages\MySQLdb\cursors.py", line 375, in _do_query
    db.query(q)
  File "C:\Users\admin\diploma_project\lib\site-packages\MySQLdb\connections.py", line 276, in query
    _mysql.connection.query(self, query)
django.db.utils.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")

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "C:\Users\admin\diploma_project\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\core\management\base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\core\management\base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\core\management\base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "C:\Users\admin\diploma_project\lib\site-packages\django\core\management\commands\migrate.py", line 234, in handle
    fake_initial=fake_initial,
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\migrations\executor.py", line 91, in migrate
    self.recorder.ensure_schema()
  File "C:\Users\admin\diploma_project\lib\site-packages\django\db\migrations\recorder.py", line 69, in ensure_schema
    raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)
django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table ((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"))
  • Вопрос задан
  • 803 просмотра
Решения вопроса 1
@marazmiki
Укротитель питонов
Думаю, дело обстоит так: проект был создан относительно давно, а Вы пытаетесь его актуализировать и обновлять зависимости. С кодовой базой сложностей нет, а вот cleardb, похоже, застрял в прошлом и работает на основе древнего mysql 5.5, поддержку из которого выпилили то ли в версии 2.0, то ли 2.1 Джанги. Отсюда и непонятки: джанга генерирует современный SQL, который старый Мускуль не в состоянии распарсить.

Проще всего именно эту ошибку исправить, заманкипатчив джангу в момент запуска проекта :
# settings.py

from django.db.backends.mysql.base import DatabaseWrapper

DatabaseWrapper.data_types['DateTimeField'] = 'datetime'
Но надо понимать, что это всего лишь костыль, чтобы быстро запуститься. Поэтому потом всё же лучше актуализировать движок базы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы