在Django中我有一个观点为什么我从Django查询中得到这个sql语法错误?
applicant=Applicants.objects.get(ben=entity_number)
f471s=applicant.form471_set.order_by("-funding_year","number")
enrollment=f471s.values("schooldata__ben").annotate(f=Max("number")).filter(
number=F("f")).values().aggregate(
s=Sum("schooldata__student_count"))['s']
以下查询当我尝试访问该页面的这一观点,我得到的错误
DatabaseError
(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 'FROM (SELECT `frontend_form471`.`number` AS `number`,
`frontend_form471`.`form_s' at line 1")
我已经记录仪打印出的SQL Django正在生成,我得到了
(0.001) SELECT FROM (SELECT `frontend_form471`.`number` AS `number`,
`frontend_form471`.`form_status` AS `form_status`, `frontend_form471`.`ben_id`
AS `ben_id`, `frontend_form471`.`funding_year` AS `funding_year`,
MAX(`frontend_form471`.`number`) AS `f` FROM `frontend_form471` LEFT OUTER JOIN
`SchoolData` ON (`frontend_form471`.`number` = `SchoolData`.`f471 Application Number`)
WHERE (`frontend_form471`.`ben_id` = 122871) GROUP BY `frontend_form471`.`number`,
`frontend_form471`.`number`, `frontend_form471`.`form_status`,
`frontend_form471`.`ben_id`, `frontend_form471`.`funding_year` HAVING
`frontend_form471`.`number` = MAX(`frontend_form471`.`number`) ORDER BY
`frontend_form471`.`funding_year` DESC, `frontend_form471`.`number` ASC)
subquery; args=(u'122871',)
仅供参考,我使用MySQL 5.1.54-1ubuntu4。它看起来像语法错误是在第一行,但我不明白为什么Django是用不正确的语法生成SQL代码。有什么办法可以改变一些事情(可能是一种设置)来解决这个问题吗?
编辑:为了回应一个答案,我也尝试运行python代码的第三行,没有第二个.values()
调用,并得到完全相同的效果。
@美国洛特是的,但用表/型号名称是不够资格的,它不应该是一个问题。 – murgatroid99
“SELECT FROM(SELECT”) SELECT之后没有任何东西 - 这是无效的SQL语法!也许这是一个错误,因为您调用values()并且它不知道可用字段,当您查找所有此注释时,聚合和过滤的东西!尝试运行它没有values()... – benjaoming
@benjaoming你应该阅读注释的文档。以前的值是如何创建一个GROUP BY子句。所以不,他不应该尝试没有 – John