是否可以在django查询集中添加一个额外的raw sql子句?最好是在普通查询集中添加RawSQL
子句。它应该是普通查询集而不是rawqueryset,因为我想在django管理中使用它。
在我的特殊情况下,我想添加一个额外的exists
where子句:
and exists (
select 1
from ...
)
在我的具体案例中,我有两个模型Customer
和Subscription
。Subscription
有一个start
和可选的end
日期字段。
我想拥有一个查询集,其中包含今天有当前订阅的所有客户。像这样的SQL查询:
select *
from customers_customer c
where exists (
select 1
from subscriptions_subscription sc
where sc.customer_id = c.id
and sc.start < current_date
and (sc.end is null or sc.end > current_date)
)
我没能用这个做一个查询集。我得到的最好的东西,是这样的:
cs = Customer.objects.annotate(num_subscriptions=RawSQL(
'''
select count(sc.id)
from subscriptions_customersubscription sc
where sc.customer_id = customers_customer.id
and sc.start < current_date
and (sc.end is null or sc.end > current_date)
''', []
))
但是这个查询的性能不如使用where exists
的SQL查询。
2条答案
按热度按时间jv4diomz1#
没有回答您的问题,但您可以这样询问客户:
3wabscal2#
对于最初的问题,可以使用
QuerySet.extra()
方法添加原始SQL,如文档中所述