首页 > 解决方案 > Django 3 与 MySQL 5.7 兼容吗?

问题描述

我在 Ubuntu 中运行一个 django 应用程序,MySQL 版本是:

mysql Ver 14.14 Distrib 5.7.34, for Linux (x86_64) using EditLine wrapper

Django 版本是3.2.5

但它引发了一个错误:

 File "/opt/anaconda3/lib/python3.7/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/opt/anaconda3/lib/python3.7/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/opt/anaconda3/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 73, in execute
    return self.cursor.execute(query, args)
  File "/opt/anaconda3/lib/python3.7/site-packages/MySQLdb/cursors.py", line 206, in execute
    res = self._query(query)
  File "/opt/anaconda3/lib/python3.7/site-packages/MySQLdb/cursors.py", line 319, in _query
    db.query(q)
  File "/opt/anaconda3/lib/python3.7/site-packages/MySQLdb/connections.py", line 259, in query
    _mysql.connection.query(self, query)

Exception Type: ProgrammingError at /category/python.html
Exception Value: (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 'UNION (SELECT `blog_article`.`id`, `blog_article`.`created_time`, `blog_article`' at line 1")

这是 Django 3 和 MySQL 5.7 之间的兼容问题吗?

更新

我的代码片段如下,可能会导致错误:

    public_article_list = Article.objects.filter(
        category__name__in=categorynames, status__in=['p', 'g'])
    user = self.request.user
    self_article_list = Article.objects.filter(category__name__in=categorynames,
                                                   type='a', status='i', author_id=user.id)
    article_list = public_article_list.union(self_article_list)
    if user.id:
        registered_view_articles = Article.objects.filter(type='a', status='z')
        article_list = article_list.union(registered_view_articles)

相同的代码运行良好mysql Ver 8.0.25 for macos10.14 on x86_64 (Homebrew)

打印结果(article_list.query)

((SELECT `blog_article`.`id`, `blog_article`.`created_time`, `blog_article`.`last_mod_time`, `blog_article`.
      `title`, `blog_article`.`body`, `blog_article`.`pub_time`, `blog_article`.`status`, `blog_article`.
      `comment_status`, `blog_article`.`type`, `blog_article`.`views`, `blog_article`.`author_id`, `blog_article`.
      `article_order`, `blog_article`.`category_id` FROM `blog_article` WHERE (`blog_article`.`status` IN (p, g) AND
      `blog_article`.`type` = a) ORDER BY `blog_article`.`article_order` DESC, `blog_article`.`pub_time` DESC) UNION
      (SELECT `blog_article`.`id`, `blog_article`.`created_time`, `blog_article`.`last_mod_time`, `blog_article`.`title`,
      `blog_article`.`body`, `blog_article`.`pub_time`, `blog_article`.`status`, `blog_article`.`comment_status`,
      `blog_article`.`type`, `blog_article`.`views`, `blog_article`.`author_id`, `blog_article`.`article_order`,
      `blog_article`.`category_id` FROM `blog_article` WHERE (`blog_article`.`author_id` = 1 AND `blog_article`.`status`
      = i AND `blog_article`.`type` = a) ORDER BY `blog_article`.`article_order` DESC, `blog_article`.`pub_time` DESC))
      UNION (SELECT `blog_article`.`id`, `blog_article`.`created_time`, `blog_article`.`last_mod_time`, `blog_article`.
      `title`, `blog_article`.`body`, `blog_article`.`pub_time`, `blog_article`.`status`, `blog_article`.
      `comment_status`, `blog_article`.`type`, `blog_article`.`views`, `blog_article`.`author_id`, `blog_article`.
      `article_order`, `blog_article`.`category_id` FROM `blog_article` WHERE (`blog_article`.`status` = z AND
      `blog_article`.`type` = a) ORDER BY `blog_article`.`article_order` DESC, `blog_article`.`pub_time` DESC)

标签: pythonmysqldjango

解决方案


推荐阅读