jango框架之模型层(d77-78)
一 单表操作:
 1 mysql数据库:settings里配置
  'default': {
   # key值必须都是大写
   'ENGINE': 'django.db.backends.mysql',
   'NAME': 'day76',
   'HOST':'127.0.0.1',
   'PORT':3306,
   'USER':'root',
   'PASSWORD':'admin',}
 2 在init文件中:
  import pymysql
  pymysql.install_as_MySQLdb()
 3 在models中,写类,写类的属性
  #自增,int,主键
  id = models.AutoField(primary_key=True)
  #varchar,长度32
  name = models.CharField(max_length=32)
  #Decimal 长度5,小数位2位
  price = models.DecimalField(max_digits=5, decimal_places=2)
  #日期类型,可以为空
  create_data=models.DateField(null=True)
 4 数据库迁移:
  python3 manage.py makemigrations   --->只是对数据变更,做记录
  python3 manage.py migrate          ---->把变更,同步到数据库
  python3 manage.py showmigrations  ---->查看那个没有提交到数据库
 5 新增表,删除表,新增字段,删除字段---->执行数据库迁移的两条命令就可以了
 6 单表增:
  -两种方式
 7 单表修改:
  -先查询出来,然后update(queryset对象的方法)
  -对象要更新,用save方法
 8 单表删除:
  -先查询出来,然后delete(queryset对象和模型对象的方法)
  *****用queryset删除,修改的时候,一定要注意,数据是几条
  -删除数据表中所有数据:Book.objece.all().delete()
 9 单表查询
  -all()    查询所有结果      
  -filter(**kwargs)     与所给筛选条件相匹配的对象    
  -get(**kwargs)   有且只有一条数据,符合筛选条件的对象超过一个或者没有都会抛出错误       
  -exclude(**kwargs) 与所给筛选条件不匹配的对象
  -order_by(*field)  对查询结果排序('-id')  -*field 取反
  -reverse()   查询结果反向排序   
  -count() 数据库中匹配查询的对象数量 
  -first()
  -last()  
  -exists() 包含数据,就返回True,否则返回False 
  -values(*field)  得到的不是一系列model的实例化对象,而是一个可迭代的字典序列
  -values_list(*field)  返回一个元组序列,values返回的是一个字典序列   
  -distinct()  剔除重复
 10 单表基于双下划线模糊查询
  Book.objects.filter(price__in=[100,200,300])
  Book.objects.filter(price__gt=100)
  Book.objects.filter(price__lt=100)
  Book.objects.filter(price__gte=100)
  Book.objects.filter(price__lte=100)
  Book.objects.filter(price__range=[100,200])
  Book.objects.filter(title__contains="python")---->%python%
  Book.objects.filter(title__endswith="py")----->%py
  Book.objects.filter(title__startswith="py")---->py%
  Book.objects.filter(title__icontains="python")--->忽略大小写
  Book.objects.filter(pub_date__year=2012,pub_date__month=12)
二 创建多表模型(详情见代码) (约束,外键管理--->不写脏数据)
 #用了OneToOneField和ForeignKey,模型表的字段,后面会自定加_id
 # ManyToManyField会自动创建第三张表
 # *************重点
 # 一对一的关系:OneToOneField
 # 一对多的关系:ForeignKey
  ForeignKey(to=Publish, to_field='id',on_delete=models.CASCADE)
  级联删除:CASCADE
  设置为空:SET_NULL
  什么都不做:DO_NOTHING
 # 多对多的关系:ManyToManyField
  
三 添加表记录
 1 一对多新增
  -两种方式:
   -publish=对象
   -publish_id=id
 2 一对多删除:同单表删除
 3 一对多修改:两种方式,可以传对象,可以传id
 4 一对一跟一对多一样
 5 多对多:
  -add  ----->可以传对象,可以传id,可以传多个
  -remove  ----->可以传对象,可以传id,可以传多个
  -clear  ---->没有参数
  -set   ----->先清空,再添加,传参,只能传列表,列表里面可以是对象,可以是id
四 基于对象的跨表查询
 1 一对一
  正向:正向查询按字段
  反向:反向查询按表名小写
 2 一对多
  正向:正向查询按字段
  反向:反向按表名小写_set.all()
 3 多对多
  正向:正向查询按字段
  反向查询:反向按表名小写_set.all()
 4******基于对象的查询,就是多次查询(子查询)
  正向---->关联字段在那个表,从那个表往外查
  反向---->关联字段不在那个表,从那个表往外查
   正向 查询红楼梦这本书的出版社邮箱
   # book=Book.objects.filter(name='红楼梦').first()
   # pulish=book.publish  就是出版社对象
   # print(pulish.email)
   反向  查询地址是北京 的出版社出版的图书
   # publish=Publish.objects.filter(addr='北京').first()
   # books=publish.book_set.all() 拿出所有的图书
   统计一下条数
   # books=publish.book_set.all().count()
   # print(books)
五 基于双下划线的跨表查询 
 1 连表查询
 2 一对一双下划线查询
  1 正向:按字段,跨表可以在filter,也可以在values中
  2 反向:按表名小写,跨表可以在filter,也可以在values中
  查询lqz的手机号
  Author.objects.filter(name='lqz').values('authordetail__phone')
  AuthorDetail.object.filter(author__name='lqz').values('phone')5 聚合查询
 3 聚合函数
  from django.db.models import Avg,Count,Max,Min,Sum #(平均,统计数量,最大,最小,求和)
  # 计算所有图书的平均价格     
  # ret=Book.objects.all().aggregate(Avg('price'))
  # print(ret)
 4 分组查询
  终极总结:
   values在前,表示group by,在后,表示取值
   filter在前,表示过滤(where),在后,表示having(对分组之后的结果再进行过滤)
六 补充
 1 F查询与Q查询
  F为了字段=后面的值,不能放字段,所以用F函数包裹一下就可以了
  Q为了构造与&,或|,非~的关系
  
 2 常用字段:必须记住,非常用字段,了解即可
 3 orm字段参数:
  null  可以为空
  unique  唯一性约束
  default 默认值
  db_index 为该字段建索引
  只给日期类型和时间类型用
   auto_now_add    新增数据时,默认把当前时间存入
   auto_now        修改的时候,默认把当前时间存入
 4 关系字段
  ForeignKey
   -to  关联哪个表
   -to_field 关联的字段
   -related_name 反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。(一般不要用)
   -related_query_name :基于双下划线的反向查询之前按表名小写(一般不要用)
   -on_delete:models.CASCADE,models.SET_NULL
   -db_constraint:db_constraint=False代表,不做外键关联
 

Django基础模型层(77-78)的更多相关文章

  1. 64、django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  2. django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  3. Django基础(2)--模板自定义标签和过滤器,模板继承 (extend),Django的模型层-ORM简介

    没整理完 昨日回顾: 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 ...

  4. Django之模型层(2)

    Django之模型层(2) 一.创建模型 实例:我们来假定下面这些概念,字段和关系. 作者模型:一个作者由姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情 ...

  5. Django之模型层:表操作

    目录 Django之模型层:表操作 一.ORM简介 django测试环境搭建 Django终端打印SQL语句 二 单表操作 2.1 按步骤创建表 2.2记录 三.多表操作 1 创建模型 2 添加.删除 ...

  6. Django之模型层第一篇:单表操作

    Django之模型层第一篇:单表操作 一 ORM简介 ​ 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数 ...

  7. Django之模型层第二篇:多表操作

    Django之模型层第二篇:多表操作 一 表关系回顾 ​ 在讲解MySQL时,我们提到,把应用程序的所有数据都放在一张表里是极不合理的. ​ 比如我们开发一个员工管理系统,在数据库里只创建一张员工信息 ...

  8. 67、django之模型层(model)--查询补充及mookie

    本篇导航: F查询与Q查询 cookie 一.F查询与Q查询 1.以Book表为例 class Book(models.Model) : title = models.CharField(max_le ...

  9. 【Django】模型层说明

    [Django模型层] 之前大概介绍Django的文章居然写了两篇..这篇是重点关注了Django的模型层来进行学习. ■ 模型定义 众所周知,Django中的模型定义就是定义一个类,其基本结构是这样 ...

随机推荐

  1. Linux中(Ubuntu18.04.x/CentOS)mysql8.0.x安装/配置/部署/启动

    The MySQL Connectors and APIs are the drivers and libraries that you use to connect applications in ...

  2. 转:Eclipse Memory Analyzer入门学习笔记

    原文地址:https://blog.csdn.net/cc907566076/article/details/79108782 Eclipse Memory Analyzer是一个快速而功能丰富的Ja ...

  3. react抛物线小球实现

    .ballFather{ position: absolute; width: 15px; height: 15px; border-radius: 50%; transition: all 0.5s ...

  4. vue 新建项目

    1. 首先安装node.js,安装时一直点Next,知道Finish就可以安装成功 2. 打开控制命令执行程序cmd,输入node -v ,可以查看node的版本信息,即安装成功,我安装的是v8.12 ...

  5. javascript常见问题总结

    1.const obj = {a:6}; obj.b=8; obj.a=9;//obj为{a:9,b:8};const定义对象的时候是可以改变内容的. const b = "hello&qu ...

  6. Linux df -h空间显示不正确

    今天发现一个测试数据库磁盘空间快满了,准备将几个不再用的表空间删除.通过以下命令删除表空间内容及数据文件. drop tablespace tablespace_name including cont ...

  7. javaEE十三种核心技术

    郭晨 软件151 1531610114 java的大方向就是JavaEE,JavaEE不仅仅是socket编程,具体包括13中核心技术. JAVAEE的核心API与组件 JAVAEE平台由一整套服务( ...

  8. 2018-2019-2 20175202实验二《Java面向对象程序设计》实验报告

    2018-2019-2 20175202实验二<Java面向对象程序设计>实验报告 一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初 ...

  9. defer、return、返回值,这三者的执行逻辑

    defer.return.返回值,这三者的执行逻辑是: return 最先执行,return 负责将结果写入返回值中:接着defer执行,可能修改返回值:最后函数携带当前返回值退出.

  10. python selenium-webdriver 登录验证码的处理(十二)

    很多系统为了防止坏人,会增加各样形式的验证码,做测试最头痛的莫过于验证码的处理,验证码的处理一般分为三种方法 1.开发给我们设置一个万能的验证码: 2.开发将验证码给屏蔽掉: 3.自己识别图片的上的千 ...