数据查询中万能的下划线基本用法:

         __contains: 包含
__icontains: 包含(忽略大小写)
__startswith: 以什么开头
__istartswith: 以什么开头(忽略大小写)
__endswith
__iendswith
__gt: 大于
__gte: 大于等于
__lt: 小于
__lte: 小于等于
__rang: 范围
models.Book.objects.filter(pub_date__range=('2015-01-01','2016-01-01'))
__isnull: 判断是否为空
__regex: 正则匹配
Entry.objects.get(title_regex=r'^(An|The) +')
__regex: 不区分大小写的正则匹配
Entry.objects.get(title_regex=r'^(an|the) +')
models.Book.objects.exclude(price=None):反查询

聚合:

         from django.db.models import Avg,Max,Mix,Sum,Count
Book.objects.all().aggregate(Avg('price')
models.Book.objects.values('publisher__name').annotate(Count('id'))
models.Book.objects.values('publisher__name').annotate(Avg('price'))
models.Book.objects.filter(name_contains='J',pub_date__year='2016')

Q 语句:

默认是AND

>>> from django.db.models import Q

>>> Q(put_date__year = '2016')

<Q: (AND: ('put_date__year', '2016'))>

AND

>>> Q(put_date__year =2016) , Q(put_date__year=2018)

(<Q: (AND: ('put_date__year', 2016))>, <Q: (AND: ('put_date__year', 2018))>)

加个| 为or的意思

>>> Q(put_date__year =2016)|Q(put_date__year=2018)

<Q: (OR: ('put_date__year', 2016), ('put_date__year', 2018))>

~ 为取非

>>> Q(put_date__year =2016)| ~ Q(put_date__year=2018)

<Q: (OR: ('put_date__year', 2016), (NOT (AND: ('put_date__year', 2018))))>

AND和OR

>>> Q(put_date__year =2016) , Q(put_date__year=2018)| Q(put_date__year=2019)

(<Q: (AND: ('put_date__year', 2016))>, <Q: (OR: ('put_date__year', 2018), ('put_date__year', 2019))>)

在生成条件语句后利用filter来进行查询

q = Q(put_date__year =2016)|Q(put_date__year=2018)

models.Book.objects.filter(q)

  

from django.db.models import Q    # 导入Q
con = Q() # 创建Q对象 q1 = Q()
q1.connector = 'OR' # q1的元素为OR或的关系
q1.children.append(('id', 1))
q1.children.append(('id', 10))
q1.children.append(('id', 9)) q2 = Q()
q2.connector = 'OR' # q2的元素为OR或的关系
q2.children.append(('c1', 1))
q2.children.append(('c1', 10))
q2.children.append(('c1', 9)) con.add(q1, 'AND') # 将q1添加到con对象中,与其他的Q为且的关系
con.add(q2, 'AND') models.Tb1.objects.filter(con) #将总的Q对象添加到model的查找条件中

  

F 语句:

自修改

本表内两个字段比较

字段数据迁移

from django.db.models impport F

1.先查看所有的商品价格

models.Book.objects.values('price')

2.所有商品价格+10

models.Book.objects.update(price=F('price')+10)

# 本表内两个字段比较

models.Book.objects.filter(num1__get= F('num2'))  # 仅仅为例子

# 表内字段数据迁移

1.memo字段默认为空,把memo字段设为为同表中的name字段的值

models.Book.objects.update(memo=F('name'))

2.models.Book.objects.values('memo,name')

Django中数据查询(万能下换线,聚合,F,Q)的更多相关文章

  1. JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法

    本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...

  2. JavaWeb_(Hibernate框架)Hibernate中数据查询语句Criteria基本用法

    Criteria进行数据查询与HQL和SQL的区别是Criteria完全是面向对象的方式在进行数据查询,将不再看到有sql语句的痕迹,使用Criteria 查询数据包括以下步骤: 1. 通过sessi ...

  3. 分组\聚合\F\Q查询

    一.分组和聚合查询 1.aggregate(*args,**kwargs)  聚合函数 通过对QuerySet进行计算,返回一个聚合值的字典.aggregate()中每一个参数都指定一个包含在字典中的 ...

  4. django orm 数据查询详解

    一 在django里面创建模型 from django.db import models class Blog(models.Model): name = models.CharField(max_l ...

  5. django对数据查询结果进行排序的方法

    在你的 Django 应用中,你或许希望根据某字段的值对检索结果排序,比如说,按字母顺序. 那么,使用 order_by() 这个方法就可以搞定了. ? 1 2 >>> Publis ...

  6. Mysql对表中 数据 查询的操作 DQL

    准备数据,倒入sql文件 运行sql文件 得到四张表 select * from 表名  * 代表全部 1.AS子句作为别名 select studentname as "姓名" ...

  7. JavaWeb_(Hibernate框架)Hibernate中数据查询语句HQL基本用法

    HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似. 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式. ...

  8. SQL Server 中数据查询注意事项

    1.查询语句不用区分大小写,而且即使每张表的表名或者列名出现大写字母,在写查询语句的时候也不用区分大小写,查询结果保持一致,所以查询语句小写即可. 2.在写查询语句的时候列名不需要带单引号,数值型的字 ...

  9. 系统的了解DJANGO中数据MODULES的相关性引用

    数据库结构如下: from django.db import models class Blog(models.Model): name = models.CharField(max_length=1 ...

随机推荐

  1. PostMan 调用WCF Rest服务

    问题描述: 现在有已有的WCF服务,但是ajax是不能请求到这个服务的: 需要把WCF转成WCF REST 的风格. 以下是从WCF转 WCF REST的步骤 1.首先在接口定义的地方加上 请求 We ...

  2. jstree的简单用法

    一般我们用jstree主要实现树的形成,并且夹杂的邮件增删重命名刷新的功能 下面是我在项目中的运用,采用的是异步加载 $('#sensor_ul').data('jstree', false).emp ...

  3. JAVA_SE基础——8.基本数据类型

    基本数据类型有:整数类型.浮点类型.字符类型.布尔类型 整数类型 整数类型用来存储整数数值,即没有小数部分的数值.与C.C++语言相同,整数在Java语言中有3种表示形式:十进制.八进制和十六进制. ...

  4. LeetCode & Q119-Pascal's Triangle II-Easy

    Description: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3 ...

  5. selenium的Python使用(一)浏览器驱动的安装及使用

    一.selenium的安装 直接使用pip进行安装 pip install selenium    #(安装最新版本) pip install selenium==3.6.0   #(安装指定版本) ...

  6. Tomcat性能优化及JVM内存工作原理

    Java性能优化原则:代码运算性能.内存回收.应用配置(影响Java程序主要原因是垃圾回收,下面会重点介绍这方面) 代码层优化:避免过多循环嵌套.调用和复杂逻辑. Tomcat调优主要内容如下: 1. ...

  7. idea找不到package下的mapper.xml文件

    由于开发人员使用不同的开发工具,导致eclipse的开发人员将mapper.xml文件习惯性的放到package下,以便查看,而eclipse编译时,不会忽略package下的xml以及dtl文件,所 ...

  8. ORM “杀器”之 JOOQ

    ORM “杀器”之 JOOQ IN 后端编程,JAVA,敏捷开发,数据库 JOOQ是啥? JOOQ 是基于Java访问关系型数据库的工具包,轻量,简单,并且足够灵活,可以轻松的使用Java面向对象语法 ...

  9. ORA-01578和ORA-26040--NOLOGGING操作引起的坏块-错误解释和解决方案(文档ID 1623284.1)

    ORA-01578和ORA-26040--NOLOGGING操作引起的坏块-错误解释和解决方案(文档ID 1623284.1) (一)NOLOGGING操作引起的坏块(ORA-01578和ORA-26 ...

  10. netty学习--netty源码中的部分util方法

    io.netty.buffer.AbstractByteBuf#calculateNewCapacity  申请内存空间 private int calculateNewCapacity(int mi ...