将SQL查询转换为Django ORM
我有SQL查询,我需要在Django中使用ORM技术将SQL查询转换为Django ORM,sql,django,postgresql,django-models,django-orm,Sql,Django,Postgresql,Django Models,Django Orm,我有SQL查询,我需要在Django中使用ORM技术 SELECT a.id, a.amount, SUM(b.amount) FROM cashflow_statement a, cashflow_statement b WHERE b.id <= a.id GROUP BY a.id ORDER BY a.id 输入数据 id, amount, date 1. 10 25/06/2020 2. -10 25/06/2020 3. 40 25/06/202
SELECT a.id, a.amount, SUM(b.amount)
FROM cashflow_statement a, cashflow_statement b
WHERE b.id <= a.id GROUP BY a.id
ORDER BY a.id
输入数据
id, amount, date
1. 10 25/06/2020
2. -10 25/06/2020
3. 40 25/06/2020
4. 10 25/06/2020
5. -30 25/06/2020
6. 10 25/06/2020
Need Output:
id, amount, sum
1. 10. 10
2. -10. 0
3. 40. 40
4. 10. 50
5. -30. 20
6. 10. 30
也许我的代码有错误,但我认为您正在寻找.filter()部分。如果需要同时使用多个过滤器,可以这样想:
x=Statement.objects.filter(date='your date').filter(amount<10)
x=Statement.objects.filter(date='your date')。filter(amount
也许我在代码中有错误,但我认为您正在寻找.filter()部分。如果您需要同时使用多个过滤器,可以这样想:
x=Statement.objects.filter(date='your date').filter(amount<10)
x=Statement.objects.filter(date='your date').filter(amount目前Django不支持子查询中的聚合,但通过一种解决方法,我们可以“欺骗”系统生成正确的查询:
from django.db.models import OuterRef, Sum, Subquery, Value
Statement.objects.annotate(
sum=Subquery(
Statement.objects.filter(
pk__lte=OuterRef('pk')
).values(x=Value(0)).order_by('x').annotate(
sum=Sum('amount')
).values('sum')[:1]
)
)
从django.db.models导入OuterRef、Sum、子查询、Value
Statement.objects.annotate(
sum=子查询(
Statement.objects.filter(
pk\uu lte=OuterRef('pk')
).values(x=Value(0)).order_by('x')。注释(
总和=总和(“金额”)
).值('sum')[:1]
)
)
目前Django不支持子查询中的聚合,但通过一种变通方法,我们可以“欺骗”系统生成正确的查询:
from django.db.models import OuterRef, Sum, Subquery, Value
Statement.objects.annotate(
sum=Subquery(
Statement.objects.filter(
pk__lte=OuterRef('pk')
).values(x=Value(0)).order_by('x').annotate(
sum=Sum('amount')
).values('sum')[:1]
)
)
从django.db.models导入OuterRef、Sum、子查询、Value
Statement.objects.annotate(
sum=子查询(
Statement.objects.filter(
pk\uu lte=OuterRef('pk')
).values(x=Value(0)).order_by('x')。注释(
总和=总和(“金额”)
).值('sum')[:1]
)
)
请共享相关模型。@WillemVanOnsem添加了模型并输出了我需要的内容,上面的Sql给出了相关的输出。请共享相关模型。@WillemVanOnsem添加了模型并输出了我需要的内容,上面的Sql给出了相关的输出。编程错误在/statement/non-integer常量处,按第1行排序:…“cashflow_statement”。“id”)按NULL顺序分组按NULL ASC…获取错误。如果我删除,值(x=Value(None))。顺序按('x'))
之后,在每个语句中获得相同的sum
值。因此它不会根据statements@NeerajKumar:这是PostgreSQL
?@NeerajKumar:使用PostgreSQL,您可能需要传递一个int,删除值当然会产生相同的值,因为我们根据Stateme的主键进行分组nt
对象。是的,在第1行的顺序中,/statement/非整数常量处出现PostgresqlProgrammingError:…“现金流_语句”。“id”)按空顺序分组按空顺序按空ASC。。。获取错误。如果我删除了,Value(x=Value(None))。在这之后按('x')
排序,在每个语句中获得相同的sum
值。所以它不是根据statements@NeerajKumar:这是PostgreSQL
?@NeerajKumar:使用PostgreSQL,您可能需要传递一个int,删除值当然会产生相同的值,因为我们根据语句
对象的主键进行分组。是的,它是PostgreSQL