常用查询及表关系的实现

1.常用查询

每一个django模型类,都有一个默认的管理器 objects

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

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

  all() 获取所有

Student.objects.all()    #返回的是queryset

  获取第一条

 Student.objects.first()  #返回的是对象

  获取最后一条

Student.objects.last()    #返回的是对象

  get(**kwargs)根据给定的条件获取一个对象,如果符合多个或没有就会报错

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

  

Student.objects.filter(name='张三').filter(sex=0)

  exclude(**kwargs)用法和filter一样,作用相反,它是排除

  order(*fileds),根据给定的字段排序

res.order_by('-age','name')   #默认asc, -age代表反向排序

  切片:使用列表的切片语法操作query,除了不能用负索引,其他都可以,他等价于LIMIT与OFFSET子句

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

res=Student.objects.values('name')    

  only(*fileds)返回一个queryset,跟values一样,区别在于这个queryset是对象列表,only一定包含主键。

res=Student.objects.only('name')

  defer(*fields)用法与only相反

res=Student.objects.defer('sex')

  多条件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)

  查询条件:

  exact  精确匹配

 res=Student.objects.filter(name__exact='张三')  

  iexact  忽略大小写

res=Student.objects.filter(name__iexact='张三')  

  contains

res=Student.objects.filter(name__contains='张三')  

  icontains

  in

res=Student.objects.filter(name__in=[18,20])

  gt  (great than)

  gte  (great than equal)

res=Student.objects.filter(name__gte=18) 

  lt  (less than)

res=Student.objects.filter(name__lt=18)  

  lte

  startswith  以什么开始

res=Student.objects.filter(name__startswith='张')   

  istartswith

  endwith     以什么结尾

  iendwith

  range  范围区间

res=Student.objects.filter(name__range=(18,20)) 

  isnull

res=Student.objects.filter(name__isnull=True)   

语法都是field__condition 是两个下划线

count返回queryset的长度

聚合函数

Avg

#计算同学们的年龄平均值
res=Student.objects.aggregate(age_avg=Avg('age'))

Max最大值

#找到年龄最大的学生
res=Student.objects.aggregate(age_max=Max('age'))

Min最小值

sum求和

分组,聚合,分组需要结合values,annotate和聚合方法看下面的案例

#查询男生女生分别有多少人
from django.db.models import Count res=Student.objects.values('sex').annotate(Count('sex'))

2.常用模型字段类型

参考官方文档

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

3.表关系实现

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

一对一

一对多

多对多

django模型系统二的更多相关文章

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

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

  2. django模型系统(二)

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

  3. django模型系统(一)

    django模型系统(一) djangode ORM ORM:对像关系映射 用python概念去表达数据库 数据库配置(mysql) 安装pumysql 修改项目目录下的__init__.py imp ...

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

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

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

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

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

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

  7. 八.django模型系统(二)之常用查询及表关系的实现

    Ⅰ.常用查询  1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...

  8. django模型——数据库(二)

    模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...

  9. Django模型系统——ORM校园管理系统代码

    1.models.py from django.db import models # Create your models here. class Class(models.Model): id = ...

随机推荐

  1. Chrome Service Model

    Chrome Service Model John Abd-El-Malek February 2016 Objective Move Chrome codebase towards a servic ...

  2. es6 学习2 模板字符

    es6模板字符简直是开发者的福音啊,解决了ES5在字符串功能上的痛点. 1.第一个用途,基本的字符串格式化.将表达式嵌入字符串中进行拼接.用${}来界定 //es5 var name = 'lux' ...

  3. 超链接:a标签

    a标签的功能:实现跳转功能 a标签的重要属性:href,target href的值为跳转目标的地址,如果是跳转页面的话,需要这个页面的超链接. target的值有四个:_blank._self._pa ...

  4. zabbix 使用自带模板监控mysql

    1.这里可以采用zabbix自带的mysql模版,但是也需要在mysql服务器上准备获取mysql status的脚本chk_mysql.sh,zabbix通过调用这个脚本来获取mysql的运行信息. ...

  5. CMDB学习之六 --客户端请求测试,服务端api优化

    客户端使用agent 请求测试,agent使用的POST 请求,使用requests模块 本地采集,汇报服务端 #!/usr/bin/env python # -*- coding:utf-8 -*- ...

  6. 如何解决本地仓库和远程仓库的冲突(Conflict)

    Background: 我有一个github仓库管理我的代码,我将这个仓库的代码clone到我的工作电脑和私人电脑本地方便我上班和在家时都可以对我的代码进行更新. 一天,我在家修改过代码之后并未提交, ...

  7. 使用npm上传npm包

    npm是一个node的包管理仓库,一个网站,也是一条命令.如何给node里增加npm包呢?只需三步就搞定. 第一步:在开始里边打开cmd进入自己的项目中,在项目目录中输入 npm init 回车会有一 ...

  8. [Recompose] Stream a React Component from an Ajax Request with RxJS

    Loading data using RxJS is simple using Observable.ajax. This lesson shows you how to take the ajax ...

  9. Cocos2d-x第三方类库不支持arm64的问题解决(64位架构)

    32位能够兼容64位操作系统. ipad mini2 64位编译有问题. 各种第三方库不支持64位操作系统. 设置build setting 直接上图:

  10. poj--1459--Power Network(最大流,超级源超级汇)

    Power Network Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit ...