Ⅰ.常用查询

 1.几个概念

  每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了)。

  QuerySet表示数据库中对象的列表(QuerySet也是一个类)。它可以有0到多个过滤器。过滤器通过给定参数,缩小查询范围。(filter)

  QuerySet等同于select语句,过滤器是一个限制子句,比如where,比如limit。

1)环境进入

2.常用查询代码

1)QuerySet 的方法(查询方法)

  • all() 获取所有

    Student.objects.all()      # 返回的是queryset 
  • 获取第一个条

  • Student.objects.first()    # 返回的是对象
  • 获取最后一条

    Student.objects.last()    # 返回的是对象
  • get(**kwargs)根据给定的条件获取一个对象,如果符合多个,或没有就会报错

  • fitler(**kwargs)过滤,根据参数提供的条件,获取一个过滤器后的QuerySet,多个条件等同于select子句使用and连接,关键字参数的形参必须是模型中的字段名。

    Student.objects.filter(name='Michael_Lxh').filter(age=16)    #效果:实现筛选叠加
  • exclude(**kwargs), 用法和filter一样,作用相反,它是排除

  • order_by(*fields),根据给定的字段排序。

    Student.objects.order_by('-age', 'name').query)      #  默认asc,-age 代表反向排序
  • 切片 使用列表的切片语法操作query,除了不能用负索引,其他的都可以,它等价于LIMIT与OFFSET子句

  • values(*fields)返回queryset, 这个queryset返回的是一个字典列表。参数fields指定了select中我们想要限制查询的字段。返回的字典列表中,只会包含我们指定的字段。如果不指定,包含所有字段。

  • only(*fields)返回一个queryset,跟values一样,区别在于这个queryset是对象列表,并且only一定包含主键。(永远有一个id)

  • defer(*fields) 用法与only相反(表中除了某个不要,其他都要)

  • 多条件OR连接,需要实现OR条件,我们要使用Q对象。

    from django.db.models import Q
    res = Student.objects.filter(Q(age=18)|Q(age=19)).only('name')

    #上面语句 等价于 下面的sql
    SELECT `teacher_student`.`id`, `teacher_student`.`name` FROM `teacher_student` WHERE (`teacher_student`.`age` = 18 OR `teacher_student`.`age` = 19)
2)查询条件

      • exact     精确匹配(等价于 =)

      • iexact     忽略大小写

      • contains     % %

      • icontains     % % 下忽略大小写

      • in

      • gt great than     (>)

      • gte great than equ  (≥)

      • lt less than    

      • Ite less than equ    

      • startwith     以什么什么开始

      • istartwith     以什么什么开始下忽略大小写

      • endwith     以什么什么结尾

      • iendwith     以什么什么结尾下忽略大小写

      • range     范围区间

      • isnull     要么是True或是False

     语法均是field__conditon,其中是两个下划线

3)实际例子(查询方法)
a.几个常见情况汇总

b.顺序问题

c.切片问题

d.关于value的内容

e.关于defer的用法

f. 关于or的用法

4)实际例子(查询条件)
a.关于exact和iexact的用法

b.关于in和大于等于等方法

c.关于isnull用法

5)聚合函数
  • count 统计数量( count( ) 返回queryset的长度) (并非聚合函数内的用法)

a.实例

  • Avg               平均值

#计算同学们的年龄平均值(如下例):
from django.db.models import Avg,Max,Min,Sum
res = Student.objects.aggregate(age_avg=Avg('age'))
res
  • Max              最大值

#找到年龄最大的学生(如下例):
from django.db.models import Avg,Max,Min,Sum
res = Student.objects.aggregate(age_max=Max('age'))
res
  • Min               最小值

  • Sum             求和

b.实例

6)分组

  聚合、分组需要结合values,annotate和聚合方法,参见如下案例:

a.查询男生女生多少人

Ⅱ.常用的模型字段类型

1.常用的字段类型映射关系

2.常用的字段类型

Ⅲ.Field的常用参数

Ⅳ.表关系的实现

  django中,模型通过特殊的字段进行关系连接

1.一对一

2.一对多

3.多对多

官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types

八.django模型系统(二)之常用查询及表关系的实现的更多相关文章

  1. Django入门--模型系统(二):常用查询及表关系的实现

    1.常用查询 模型类上的管理器: ** 模型类.objects ** (1)常用一般查询 rs = Student.objects.all() # 查询所有记录,返回Queryset print(rs ...

  2. Django 07 Django模型基础2 (常用查询和多表关联)

    Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...

  3. django模型系统二

    常用查询及表关系的实现 1.常用查询 每一个django模型类,都有一个默认的管理器 objects QuerySet表示数据库中对象的列表,它可以有0到多个过滤器.过滤器通过给定参数,缩小查询范围. ...

  4. python的Web框架,Django模型系统二,模型属性,及数据库进阶查询

    原始数据接上篇文章来操作.可能需要查看后才能懂.点击这里查看 1.常用的模型字段类型 官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fie ...

  5. 七、Django模型基础第二节——常用查询

    1 常用的模型字段类型 官方文档链接: https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 常用的字段类型 模型字 ...

  6. Django框架基础知识07-常用查询及表关系的实现

    1.常用的模型字段类型 https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 2.字段的常用参数 官方文档:http ...

  7. django模型系统(二)

    django模型系统(二) 常用查询 每一个django模型类,都有一个默认的管理器,objects QuerySet表示数据库中对象的列表.他可以有0到国歌过滤器.过滤器通过给定参数,缩小查询范围( ...

  8. {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询

    Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...

  9. day 70 Django基础五之django模型层(二)多表操作

    Django基础五之django模型层(二)多表操作   本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...

随机推荐

  1. mac webstorm无法打开 如何使webstorm不卡

    场景:在应用程序里删除了原先的webstorm,然后从官网下载了新的安装包,进行安装.安装后,webstorm就再也打不开了. 解决方案:执行以下命令,清楚webstorm所有缓存,然后重新安装 $ ...

  2. 【esri-loader】帮助文档翻译 part1 是什么,怎么安装,为什么要用它

    是什么 esri-loader是一个JavaScript库(包/模块,Web模块化编程的概念),用于在非Dojo框架的Web页面中加载ArcGIS API for JavaScript 3.x或4.x ...

  3. Android为TV端助力:EventBus跨进程发送消息

    单一app内的用法 如果你在单一app内进行多进程开发,那么只需要做以下三步: Step 1 在gradle文件中加入下面的依赖:   dependencies {   compile 'xiaofe ...

  4. java:数据结构(二)栈的应用(括号匹配)

    一.什么是括号匹配: 括号匹配就是利用计算机辨别表达式里面的括号是否书写成功 例如: {()((a)) }这就是一个正确 (()()   这就是一个错误的 二.括号匹配的算法: 众所周知,括号分为花括 ...

  5. 大整数相乘问题总结以及Java实现

    最近在跟coursera上斯坦福大学的算法专项课,其中开篇提到了两个整数相乘的问题,其中最简单的方法就是模拟我们小学的整数乘法,可想而知这不是比较好的算法,这门课可以说非常棒,带领我们不断探索更优的算 ...

  6. Hive动态分区

    1.开启支持动态分区 set hive.exec.dynamic.partition=true; --默认为false set hive.exec.dynamic.partition.mode=nos ...

  7. 如何连接别人电脑上的Oracle数据库?

    需要一些前提条件: 1.对方的主机能被连接(如在同一局域网内) 2.需要知道对方数据库IP.端口号.服务名 3.需要知道对方提供的管理数据库的用户名及密码 连接方法: 1.在本地的oracle安装目录 ...

  8. 【Linux基础】Linux命令date 日期时间

    1.显示到纳秒 date +%F.%H:%M:%S.%N --:38.740127086 date +%Y-%m-%d.%H:%M:%S.%N2019-04-25.00:28:24.060756673 ...

  9. 移动开发的捷径:3种方式轻松创建webapp

    移动开发行业发展迅速,为迎合用户的需求,大多数传统互联网公司在主导web网站的同时还需兼顾移动开发方向.在已有PC端网站的基础上,考虑到人力.成本和技术.开发周期等因素,许多公司会选择开发快速.维护便 ...

  10. nginx正向代理和反正代理区别

    1)正向代理:客户端 <一> 代理 一>服务端 客户端访问不到服务端,所以找了代理,由代理帮忙访问到了服务端 2)反向代理:客户端 一>代理 <一> 服务端 客户端 ...