Django_执行 migrate 指令报错 : MySQL server version for the right syntax to use near '(6) NOT NULL)' at li

Django 框架可以根据实体类 去生成 数据库表,我们只需要执行 

python manage.py makemigrations

python manage.py migrate 

即可

这两条指令的作用如下 :

python manage.py makemigrations 用于生成迁移文件

python manage.py migrate  用于根据迁移文件生成数据库文件

在我执行过程中遇到了如下问题:

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

扫描二维码关注公众号,回复: 10761533 查看本文章

Traceback (most recent call last):
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\db\migrations\recorder.py", line 67, in ensure_schema
    editor.create_model(self.Migration)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\db\backends\base\schema.py", line 307, in create_model
    self.execute(sql, params or None)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\db\backends\base\schema.py", line 137, in execute
    cursor.execute(sql, params)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\db\backends\utils.py", line 99, in execute
    return super().execute(sql, params)
  File "E:\PYTHON_HOME\Python37\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 "E:\PYTHON_HOME\Python37\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\db\backends\utils.py", line 82, in _execute
    return self.cursor.execute(sql)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\db\backends\mysql\base.py", line 71, in execute
    return self.cursor.execute(query, args)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\pymysql\cursors.py", line 170, in execute
    result = self._query(query)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\pymysql\cursors.py", line 328, in _query
    conn.query(q)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\pymysql\connections.py", line 517, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\pymysql\connections.py", line 732, in _read_query_result
    result.read()
  File "E:\PYTHON_HOME\Python37\lib\site-packages\pymysql\connections.py", line 1075, in read
    first_packet = self.connection._read_packet()
  File "E:\PYTHON_HOME\Python37\lib\site-packages\pymysql\connections.py", line 684, in _read_packet
    packet.check_error()
  File "E:\PYTHON_HOME\Python37\lib\site-packages\pymysql\protocol.py", line 220, in check_error
    err.raise_mysql_exception(self._data)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
    raise errorclass(errno, errval)
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 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\core\management\base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\core\management\base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\core\management\base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\core\management\commands\migrate.py", line 234, in handle
    fake_initial=fake_initial,
  File "E:\PYTHON_HOME\Python37\lib\site-packages\django\db\migrations\executor.py", line 91, in migrate
    self.recorder.ensure_schema()
  File "E:\PYTHON_HOME\Python37\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"))
 

最终定位到的问题原因 是 MySQL 版本问题, 

Django2.1不再支持MySQL5.5,必须5.6版本以上

查看MySQL版本 

https://www.cnblogs.com/wujf-myblog/p/9570870.html

在客户端 运行 

SELECT VERSION();

所以有两种方案 :

1)降低 Django版本

降低 Django 版本指令:

pip install Django==2.0.0

2)MySQL 升级

请参考我的另一篇文章 :

https://blog.csdn.net/u010003835/article/details/97963117

发布了520 篇原创文章 · 获赞 1146 · 访问量 283万+

猜你喜欢

转载自blog.csdn.net/u010003835/article/details/97038434