zoukankan      html  css  js  c++  java
  • Django ORM查询之extra查询

    extra(select=None, where=None,params=None,tables=None, order_by=None, select_params=None)
    

    有些情况下,Django的查询语法难以简单的表达复杂的 WHERE 子句,对于这种情况, Django 提供了 extra() QuerySet修改机制 — 它能在 QuerySet生成的SQL从句中注入新子句。

    参数之SELECT  

    The select 参数可以让你在 SELECT 从句中添加其他字段信息,它应该是一个字典,存放着属性名到 SQL 从句的映射。

    queryResult=models.Article.objects.extra(select={'is_recent': "create_time > '2018-04-18'"})
    

    结果集中每个 Entry 对象都有一个额外的属性is_recent, 它是一个布尔值,表示 Article对象的create_time 是否晚于2018-04-18.

    article_obj=models.Article.objects.filter(nid=1).extra(select={"standard_time":"strftime('%%Y-%%m-%%d',create_time)"}).values("standard_time","nid","title")
    print(article_obj)
    # <QuerySet [{'title': 'MongoDb 入门教程', 'standard_time': '2017-09-03', 'nid': 1}]>  
    

    参数之where /tables

    您可以使用where定义显式SQL WHERE子句 - 也许执行非显式连接。您可以使用tables手动将表添加到SQL FROM子句。

    wheretables都接受字符串列表。所有where参数均为“与”任何其他搜索条件。

    queryResult=models.Article.objects.extra(where=['nid in (1,3) OR title like "py%" ','nid>2'])
    

      

     

    models.Article.objects.all().filter(user=current_user).extra(select={"filter_create_date":"strftime(‘%%Y/%%m‘,create_time)"}).values_list("filter_create_date").annotate(Count("title"))
    extra使用来进行过滤的,参数select必须等于一个字典(转成sql的where语句去执行,查出create_time,然后转换成自己格式化的时间)
    #按照查询出来的年份和月份进行分组,并且显示文章个数

     

     result = result.extra(
                        where=[
                            'uuid in (select DISTINCT equipment_id from bms_system_equipment_module where module_id in %s)'],
                        params=[get_module_ids(module)]
    

      

    I can feel you forgetting me。。 有一种默契叫做我不理你,你就不理我

  • 相关阅读:
    ASP内置对象
    VBscript脚本语言
    2018校园招聘求职记
    0.3W微功率放大器
    画一画BeagleboneBlack的PCB
    硬件类实习面试经历(已跪)
    2017会是改变人生轨迹的一年
    windows下使用vs code调试简单的C程序
    Beagleboneblack的MLO文件干了些啥
    模仿u-boot的makefile结构
  • 原文地址:https://www.cnblogs.com/weidaijie/p/10951213.html
Copyright © 2011-2022 走看看