由于某些原因,我必须使用原始SQL查询,该查询将传递给django以使用mymodel.objects.raw(query)执行。但是我看到主键始终需要传递。这就是阻止我进行一些查询的原因。
想象一下一个简单的查询,其中我对表进行了count(*)以及对两列的条件检查:
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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句