gpt4 book ai didi

python - Django 原始查询 : Making Count query with group BY clause

转载 作者:太空狗 更新时间:2023-10-30 00:55:49 26 4
gpt4 key购买 nike

出于某种原因,我必须使用原始 SQL 查询,该查询将传递给 django 以使用 mymodel.objects.raw(query) 执行。但我看到主键需要始终传递。这就是阻止我提出一些疑问的原因。

想象一个简单的查询,我在表上执行计数 (*) 以及对两列进行条件检查:

select count(*), column_value from tableX where column_label = 'Age' group by column_value having column_value > 30;

这在 pgsql 中工作得很好,并给出如下结果:

 count | column_value 
-------+----------------
1 | 38.00000
2 | 45.00000
1 | 35.00000
1 | 44.00000

注意第二行。这正是我想要的结果。但是对于 Django,我必须传递主键,为此我必须像这样更改查询:

将“id”视为主键:

    select count(*), id, column_value from tableX where column_label = 'Age' group by column_value, id having column_value > 30;

现在这将给我这样的东西:

 count |  id  | column_value 
-------+------+----------------
1 | 4041 | 45.00000
1 | 3876 | 38.00000
1 | 3821 | 45.00000
1 | 3931 | 35.00000
1 | 3986 | 44.00000
(5 rows)

即使在运行聚合命令后我也能看到所有单独的行,这对我没有用。有没有其他方法可以仅使用 django 获取此处提到的第一个结果,使用 RAW 查询?一些破解主键的方法?

最佳答案

一个可能的解决方案是使用 connection.cursor()直接执行原始查询:

from django.db import connection

cursor = connection.cursor()
cursor.execute("""select
count(*), column_value
from
tableX
where
column_label = 'Age'
group by
column_value
having
column_value > 30""")
result = cursor.fetchall()

关于python - Django 原始查询 : Making Count query with group BY clause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24226180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com