django模型系统(二)

django模型系统(二)

常用查询

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

QuerySet表示数据库中对象的列表。他可以有0到国歌过滤器。过滤器通过给定参数,缩小查询范围(filter)。
QuerySet等同与select语句,过滤器等同于一个限制字句,比如where、limit

  • 使用.query可查看对应的SQL语句
  1. all()获取所有
    name.objects.all()queryset
  2. 获取第一条
    name.objects.first()返回的是对象
  3. 获取最后一条
    name.objects.last()返回的是对象
  4. get(**kwargs)根据给定的条件获取一个对象,如果符合多个或者没有就会报错
  5. fitler(**kwargs)过滤,根据参数提供的条件,获取一个过滤器后的QuerySet,多个条件等同于select子句使用and连接,关键字参数的形参必须是模型中的字段名。
Student.objects.filter(name='xinlan').filter(age=18)
  1. exclude(**kwargs), 用法和filter一样,作用相反,它是排除
  2. order_by(*fields),根据给定的字段排序。多个的时候有先后顺序。
Student.objects.order_by('-age', 'name').query)
#  默认asc,-age 代表反向排序
  1. 切片 使用列表的切片语法操作query,除了不能用负索引,其他的都可以,它等价于LIMIT与OFFSET子句。[::]
  2. values(*fields)返回queryset, 这个queryset返回的是一个字典列表。参数fields指定了select中我们想要限制查询的字段。返回的字典列表中,只会包含我们指定的字段。如果不指定,包含所有字段。
  3. only(*fields)返回一个queryset,跟values一样,区别在于这个queryset是对象列表,only一定包含主键。
  4. defer(*fields) 用法与only相反
  5. 多条件OR连接,需要实现OR条件,我们要使用Q对象。
    • 注意:要导入模块from django.db.models import 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 精确匹配
    例如:Student.objects.filter(name__exact=‘XXX‘)#_exact可以不写
  • iexact 忽略大小写
  • contains 包含,对应sql的%
  • icontains 包含(忽略大小写)
  • in 等价sql的in
  • gt 大于:grate than
  • gte 大于等于:grate than equ
  • lt 小于:less than
  • lte 小于等于:less than equ
  • startswith 以什么什么开始
  • istartswith 忽略大小写
  • endwith 以什么什么结束
  • iendwith 忽略大小写
  • range **__range=(),范围区间,等价于sql:between...and...
  • isnull 是否为空

语法都是field__conditon= 是 两个下划线

count() ,统计。返回queryset的长度

聚合函数

语法:

list_name.objects.aggregate(anyname=Avg('age'))
#必须要用aggregate方法,anyname自己命名
#返回的市dit字典,不是query语句,无法查询sql语句
  • Avg 平均值
# 计算同学们的年龄平均值
res = Student.objects.aggregate(age_avg=Avg('age'))  
  • Max 最大值
    # 找到最大的年龄
    res = Student.objects.aggregate(age_max=Max('age')) 
  • Min 最小值
  • Sum求和
  • 分组,聚合,分组需要结合values,annotate和聚合方法看下面的案例
  # 查询男生女生分别有多少人
  In [84]: from django.db.models import Count
#必须要导入模块
  In [85]: res = Student.objects.values('sex').annotate(Count('sex'))  

常用模型字段类型

官方文档说明:

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

表关系实现

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

  • 一对一
  • 一对多
  • 多对多

例如:

anyname = models.OneToOneField('class_name',on_delete=models.CASCADE)#on_delete级联等外键关系

注意事项:

  • 多对多关系,如果第三方表还有额外得到属性,需要手动创建第三方表并加入额外属性。并且要使用through属性指定第三张表。
    例如:

    class A(models,Model):
        pass
    
    class B(models,Model):
        anyname = models.ManyToManyField('A',through='C')
    #B和A表多对多关联,手动生成第三方表,通过through指定第三方表C,在表C中可以添加额外属性
    
    class C(models,Model):
        pass

原文地址:https://www.cnblogs.com/pygive/p/10724294.html

时间: 2024-08-29 22:42:58

django模型系统(二)的相关文章

django模型系统二

常用查询及表关系的实现 1.常用查询 每一个django模型类,都有一个默认的管理器 objects QuerySet表示数据库中对象的列表,它可以有0到多个过滤器.过滤器通过给定参数,缩小查询范围. QuerySet等同于select语句,过滤器是一个限制子句,比如where,limit. all() 获取所有 Student.objects.all() #返回的是queryset 获取第一条 Student.objects.first() #返回的是对象 获取最后一条 Student.obj

Django模型系统(一)

装饰器补充 django模型系统 一,数据库的链接配置 二,Django的ORM简介 三,模型的创建与激活 四,数据的增删改查 一,数据库的链接配置 django  链接mysql的配置流程: -安装pymysql --   pip  install  pymysql -创建数据库用户 -有创建数据库权限的用户 -创建数据库 create database mysite; (创建需要的数据库) -修改配置 -修改项目文件(和settings.py文件所在的目录)下 __init__.py文件 -

Django 模型系统(model)&ORM--进阶

QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. >>> Entry.objects.all()[:5] # (LIMIT 5) >>> Entry.objects.all()[5:10] # (OFFSET 5 LIMIT 5) 不支持负的索引(例如Entry.objects.all()[-1]).通常,查询集 的切片返回一个新的查询集 —— 它不会执行查询. 可迭代 articleL

08 django模型系统(一)

课前补充:1.虚拟环境的账号不要用root账号链接虚拟机 1.数据库的连接配置django 连接mysql的配置流程: - 进入虚拟环境,安装mysql pymysql pip install pymysql - 创建数据库用户 有创建数据库权限的用户 例如:创建一个管理员用户crm账号,密码为crm@python CREATE USER 'crm'@'%'IDENTIFIED BY 'crm@python'; 给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作. GR

B django模型系统(后续1)

1.数据库的链接配置 django里mysql的连接流程 安装--pip install  pymysql 创建数据库用户 有创建数据库的权限的用户 创建数据库 crm 修改配置  setings DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'crm', 'USER':'root', 'PASSWORD':'qwe123', 'HOST':'127.0.0.1', 'PORT':'3306',

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

目录 一 创建模型 关于db_column和verbose_name 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询(基于join实现的) 进阶练习(连续跨表) 五 聚合查询.分组查询.F查询和Q查询 查询练习 F查询与Q查询 F查询 Q查询 六 ORM执行原生sql语句(了解) 执行原生查询 直接执行自定义SQL 七 Python脚本中调用Django环境(django外部脚本使用models) 八 补充多个app配置models 本节目录 一 创建模型 表和表之间的关系

Django 模型系统(model)&ORM--基础

ORM 映射关系: 类 ---> 表 属性 ---> 字段 对象 --->一条数据 创建表(建立模型) 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email. 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系

django模型系统(三)--多对多,一对一以及跨表查询

-Many-to-Many*** 指定了中间表,add,remove,set 都不能用,必须用中间表 两端都可以自动获得另一端的自动API访问.跟一对多的反向访问类似.但是使用的是本字段的字段名 In [112]: Course.objects.create(name='python全栈') Out[112]: <Course: python全栈> In [113]: Course.objects.create(name='python全套') Out[113]: <Course: py

Django中模型(二)

Django中模型(二) 三.定义模型 1.模型.属性.表.字段间的关系: 一个模型类在数据库中对应一张表:在模型类中定义的属性,对应该模型对照表中的字段. 2.定义属性 A.概述 ·django根据属性的类型确定以下信息 ·当前选择的数据库支持字段的类型 ·渲染管理表单时使用的默认html控件 ·在管理站点最低限度的验证 B. ·django会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列 C.属性命名限制 ·遵循标识