extra(select=None, where=None,params=None,tables=None, order_by=None, select_params=None)
有些情况下,Django的查询语法难以简单的表达复杂的 WHERE 子句,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
FROM子句。
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)]
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django ORM查询之extra查询 - Python技术站