如何编写高级 Django ORM 查询

     2023-03-04     277

关键词:

【中文标题】如何编写高级 Django ORM 查询【英文标题】:How write advance Django ORM query 【发布时间】:2017-12-22 01:13:39 【问题描述】:

为了简化事情,假设我有一个模型 StockIOLog。

class StockIOLog(models.Model):
    pid = models.IntegerField()
    name= models.CharField(max_length=50)
    type= models.IntegerField()
    stock = models.IntegerField()

它包含以下数据:

pid  |   name  |  batch | type  | quantity
------------------------------------------------
1    |   Napa  |  AB    | 0     | 100
------------------------------------------------
1    |   Napa  |  AA    | 0     | 100
------------------------------------------------
2    |   Amod  |  AA    | 0     | 100
------------------------------------------------
2    |   Amod  |  CA    | 0     | 100
------------------------------------------------
1    |   Napa  |  AB    | 1     | 10
------------------------------------------------
1    |   Napa  |  AB    | 1     | 5
------------------------------------------------
1    |   Napa  |  AA    | 1     | 20
 ------------------------------------------------
2    |   Amod  |  AA    | 1     | 10
------------------------------------------------
2    |   Amod  |  AA    | 1     | 50
------------------------------------------------
2    |   Amod  |  CA    | 1     | 5
------------------------------------------------
2    |   Amod  |  CA    | 1     | 15

type 0 表示产品已购买,type 1 表示产品已消耗,现在我想分批计算每个产品的总库存。

通过运行以下 SQL 查询

SELECT pid, name, batch, SUM(in) - SUM(out) as stock FROM (
   SELECT pid, name, type SUM(quantity) as in, 0 as out from `qset` WHERE type=0 GROUP BY pid,type,batch as a 
   UNION
   SELECT pid, name, type 0 as in, SUM(quantity) as out from `qset` WHERE type=1 GROUP BY pid,type,batch as b
) ac table_a

我得到以下查询集

pid  |   name  |  batch | stock
-----------------------------------
1    |   Napa  |  AB    | 85
-----------------------------------
1    |   Napa  |  AA    | 80
-----------------------------------
2    |   Amod  |  AA    | 40
-----------------------------------
2    |   Amod  |  CA    | 80

django ORM中如何做类似的事情?

【问题讨论】:

SQL查询的问题很难理解。你能解释一下这个场景吗? @Md.Al-Amin 更简要地更新了问题 【参考方案1】:

也许不是最好的答案,但您可以通过以下查询在字典中获取 purchasedconsumed

from django.db.models import When, F, IntegerField, Sum, Count
from .models import StockIOLog

values = (StockIOLog.objects.all().values("pid", "name", "batch").annotate(
    purchased=Sum(Case(When(type=1, then=F("stock")),
                       output_filed=IntegerField())),
    consumed=Sum(Case(When(type=0, then=F("stock")),
                      output_field=IntegerField())))
)

【讨论】:

使用 Rest API 编写复杂查询的 Django ORM

】使用RestAPI编写复杂查询的DjangoORM【英文标题】:DjangoORMwithRestAPIwritingcomplexquery【发布时间】:2020-01-0306:38:00【问题描述】:我写了一个功能,比如如果一个人有相关数据,用户就不能执行更新。给你我的模型:classPerson(models.M... 查看详情

在 Django ORM 中按查询分组

...DjangoORM【发布时间】:2021-10-1913:38:19【问题描述】:我对如何编写django查询来获取我的数据感到困惑。我有2张桌子\'ticket\'和\'ticket_details\'。下面是他们的架构。Ticket(id,name,type,user)TicketDetails(ticket_id,message,created_time) 查看详情

Django - 我如何在 ORM 中执行此查询

】Django-我如何在ORM中执行此查询【英文标题】:Django-howcanIdothisqueryintheORM【发布时间】:2018-12-0507:29:34【问题描述】:大家好,我正在尝试进行此查询:SELECT*FROMdashboard_informeinfINNERJOINdashboard_servicioservONinf.servicio_id=serv.idWHEREserv.n... 查看详情

如何使用子查询 django ORM?

】如何使用子查询djangoORM?【英文标题】:HowtodjangoORMwithasubquery?【发布时间】:2013-01-1003:05:54【问题描述】:sql子查询是:SELECT*FROM(SELECT*FROMarticleORDERBYFiddescLIMIT0,200)aslWHEREkeyId=1ANDtypeId=0我试过了:rets=Article.objects.order_by("-Fid").val 查看详情

在使用 ORM 的 Django 中,如何对不同的值进行多个自连接

】在使用ORM的Django中,如何对不同的值进行多个自连接【英文标题】:InDjangousingORM.,howtodomultipleselfjoinondifferentvalues【发布时间】:2018-01-1023:27:00【问题描述】:谁能帮助我如何使用ORM在Django中针对不同的值编写多个自联接?例... 查看详情

如何在 Django ORM 中重写查询?

】如何在DjangoORM中重写查询?【英文标题】:HowrewritequeryinDjangoORM?【发布时间】:2017-08-2317:30:55【问题描述】:请帮忙改写为DjangoORMSELECT*FROMTWHEREREPLACE(T.field,\'-\',\'\')=REPLACE(VALUE,\'-\',\'\')【问题讨论】:【参考方案1】:您可以关... 查看详情

如何在 Django orm 中执行子查询?

】如何在Djangoorm中执行子查询?【英文标题】:howtoexecutesubqueryinDjangoorm?【发布时间】:2014-11-1713:51:34【问题描述】:django模型.pyclasscdr(models.Model):id=models.AutoField(primary_key=True,unique=True,verbose_name=\'id\',)disposition=models.CharFi 查看详情

如何查看 Django ORM 运行的查询?

】如何查看DjangoORM运行的查询?【英文标题】:HowtoseequeriesrunbyDjangoORM?【发布时间】:2020-08-0310:11:08【问题描述】:我在settings.py文件中有DEBUD=True。我用django配置了MySQL数据库。我在courses/models.py中有一个Course模型。在courses/views.... 查看详情

如何使用 Django ORM 查询两个传入模型?

】如何使用DjangoORM查询两个传入模型?【英文标题】:HowdoIqueryontwoincomingmodelsusingtheDjangoORM?【发布时间】:2013-11-1221:41:07【问题描述】:我有以下型号:classDataStream(models.Model):category=models.CharField(max_length=255)description=models.TextField... 查看详情

如何使用Django ORM查询计算数量乘以价格

】如何使用DjangoORM查询计算数量乘以价格【英文标题】:HowtoquerytocalculatethequantitytimesthepriceusingDjangoORM【发布时间】:2019-08-2410:35:06【问题描述】:我想知道如何在DjangoORM中获得总价格:数量乘以价格,以及模板使用哪个变量来... 查看详情

在 django ORM 中查询时如何将 char 转换为整数?

】在djangoORM中查询时如何将char转换为整数?【英文标题】:HowdoicastchartointegerwhilequeryingindjangoORM?【发布时间】:2015-03-2200:01:06【问题描述】:最近开始使用DjangoORM。我想执行这个查询selectstudent_idfromstudentswherestudent_idlike"%97318%"ord... 查看详情

如何使用 sequelize ORM 编写内连接查询?

】如何使用sequelizeORM编写内连接查询?【英文标题】:HowtowriteanInnerJoinqueryusingsequelizeORM?【发布时间】:2021-04-1117:30:34【问题描述】:我的内部连接查询如下所示SELECTlist.id,list.name,sa.createdByFROMlistINNERJOINdatasaONsa.listId=list.idWHEREsa.ty... 查看详情

使用Django ORM查询如何注释是不是存在多级外键层次结构

】使用DjangoORM查询如何注释是不是存在多级外键层次结构【英文标题】:UsingDjangoORMqueryHowtoannotateifmultiplelevelsofforeignkeyhierarchyexists使用DjangoORM查询如何注释是否存在多级外键层次结构【发布时间】:2016-11-1101:43:22【问题描述】:... 查看详情

从 django orm 获取硬查询。 Django 休息框架

...ect。我需要列出ShareProject.user=request.user的项目。我很困惑如何获得这个查询集。classProject(models.Model): 查看详情

使用 filter() 和 Q 对象混合的 Django ORM 查询

...1-1301:23:05【问题描述】:我正在寻找使用原始SQL相当容易编写的稍微复杂的查询。这是原始查询的示例:SELECTmy,fieldsFROMsalesWHEREis_paid=FalseORstatus=\'toship\'ANDotherf 查看详情

Django:如何使用 Prefetch 对象“加入”两个查询集?

】Django:如何使用Prefetch对象“加入”两个查询集?【英文标题】:Django:Howto"join"twoquerysetsusingPrefetchObject?【发布时间】:2021-11-1523:11:43【问题描述】:上下文我对Django很陌生,我正在尝试编写一个复杂的查询,我认为在... 查看详情

如何在不使用字段名的情况下运行 django orm 查询?

】如何在不使用字段名的情况下运行djangoorm查询?【英文标题】:Howtorundjangoormquerywithoutusingfieldname?【发布时间】:2021-12-0120:32:57【问题描述】:所以我有一个json数据,其中包含模型的字段名称作为带有值的json键。我想在运行... 查看详情

需要与 Django ORM 查询相关的优化和性能

...时间】:2013-11-1307:15:45【问题描述】:我正在django1.4.5中编写一个API,它将JSON数据返回给第三方应用程序。这是我目前检索数据的方法,但它需要更多时间,因为我还需要JSON格式的相关数据。defget_speakers(reque 查看详情