python - 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)
解决方案
推荐阅读
- r - 为列 R 中的每个重复值分配一个唯一的 ID 号
- projection - WinBugs 中的“此初始值不对应于随机节点”
- html - 默认值的下拉验证
- javascript - CryptoJS 和 openssl_decrypt 不产生相同的结果
- excel - 将从 VBA 创建的工作簿文件保存到 Sharepoint
- configuration - Snort 配置死胡同
- python - if 语句和 randint 的 Python 问题
- css - 如何将图像与文本并排放置?
- javascript - 使用 React ref 存储类实例?
- python - 将列表字典的值转换为浮点数