django模型基础知识整合

模型

  • django对各种数据库提供了很好的支持,django为这些数据库提供统一的调用API
    我们可以根据业务需求选择不同的数据库

  • 配置数据库

    • 工程目录下的__init__.py文件中修改
      添加:
      import pymysql
      pymysql.install_as_MySQLdb()
    • 修改setting.py文件
      DATABASES = {
                      'default': {
                          'ENGINE': 'django.db.backends.mysql',
                          'NAME': 'User',
                          'USER':'root',
                          'PASSWORD':'root',
                          'HOST':'localhost',
                          'POST':'3300',
                      }
                  }
      
  • 开发流程;
    1、配置数据库
    2、定义模型类—>一个模型类都在数据库中对应一张数据表
    3、执行迁移生成数据表
    4、使用模型类进行增删改查(c、r、updata、d)操作

  • ORM(关系–映射)(对象映射关系)
    django <----> ORM <----> Mysql、sqlit、orcal(数据库)
    任务:
    1、根据对象的类型生成表结构
    2、将对象,列表的操作转换为sql语句
    3、将sql语句查询到的结果装换为对象、列表
    优点:极大地减轻了开发人员工作量,不需要面对一种数据库的改变而修改代码

  • 定义模型(模型、属性、表、字段间的关系)

    • 模型、属性、表、字段间的关系:
      一个模型类在数据库中对应一张表,在模型类中定义的属性,对应该模型对照表中的一个字段
    • 定义属性见文档
    • 创建模型类
    • 元选项:
      • 在模型类中定义一个Mate类,用于设置(元)信息
      • db_table :定义数据表名(推荐是用小写),如果不写默认为项目小写名.类名小写,可以自己设置
      • ordering:
        对象的默认排序字段,获取列表时使用
        ordering[‘id’] :升序
        ordering[’-id’]:降序
        注意:排序会增加数据库的开销
  • 模型成员

    • 类属性: (查询器) 数据库取数据
      • objects\
        是Manage类型的一个对象,作用是与数据库进行交换.
        当定义模型类时没有指定管理器,则django为模型创建objects的管理器
        我们可以自定义管理器:
        class Stundent:
        自定义模型管理器
    • 名称 = models.Manager()
      当为模型指定模型管理器,django就不再为模型生成objects模型管理器
      自定义管理器Manager类
      • 概念:
        模型管理器是django的模型进行数据库进行交互的接口,一个模型类可以有多个模型管理器
      • 作用:
        我们可以相关利器类中添加额外的方法
        修改管理器返回的原始查询集:重写get_queryset()
    • 创建对象:
    • 目的:项数据库添加数据
      • 当创建对象时,django不会对数据库进行读写操作,当调用save()方式时才与数据库交互,将对象保存到到数据库中。
      • 注意:__init__已经在父类中models.Model中使用,在自定义的模型中无法使用
    • 方法:
      • 在模型类中增加一个类方法
      • 在自定义管理器种添加方法
    • 模型查询:
      • 概述;
        • 查询表示从数据库获取的对象集合
        • 查询集可以有多个过滤器(filter)
        • 过滤器就是一个函数,给予所给的参数限制查询结果
        • 从sql角度来说查询集合和select语句等价,过滤器就像where条件
      • 查询集:
        • 在管理其上调用方法返回查询集
        • 查询集经过调用过滤器筛选后返回新的查询集,所以可以写成链式调用
        • 惰性执行:创建查询集不会带来任何数据的访问,直到调用数据时,才会访问
        • 直接访问数据
          • 迭代
          • 序列化
          • 与IF合用
        • 返回查询集的方法就叫过滤器
          • all():返回查询集中的所有数据
          • filter() :返回符合条件的数据
            - filter(键=值)
            • filter(键=值,键=值)且关系,符合两个条件返回
            • filter(键=值).filter(键=值)
              • exclude():过滤掉符合条件的数据
              • order_by():排序
              • values():一条数据就是一个对象(字典),返回一个列表
        • 返回单个数据:
          • get():返回一个满足条件的对象
            • 注意:如果没有找到符合的对象,会引发 模型类 DoesNotExist
            • 如果找到对个对象,会引发 MultipleObjectsReturned
          • count():返回当前查询集中对象的个数
          • first():返回查询集中第一个对象
          • last():返回查询集中最后一个对象
          • exists():判断查询集中是否有数据,如果有返回True,没有返回False
        • 限制查询集:
          • 查询集返回列表,可以使用下标的方法进行限制,等同于sql中的init语句
            studentlist = Students,stuObj2.all()[0:5]
          • 注意:下标不能是负数
        • 查询集的缓存
          概念:每个查询集都包含一个缓存,来最小化的对数据库访问 在新建的查询集中,缓存首次(新建的)为空,第一次对查询集求值,会发生数据缓存,django会将查询出来的数据做一个缓存,并返回查询结构,以后的查询直接返回查询集缓存中数据。
        • 字段查询
          • 概念:实现了数据库中的where语句,作为方法filter(),exclude(),get()的参数
            • 语法:属性名__比较运算符=值
            • 外键:属性名__id
            • 转义:类似数据库(sql)中的like语句,(模糊查询)
              比较运算符(stu = student.object.fiter(表名+_+参数)):
            • 参数:
              • exact:判断,大小写敏感
              • contains:是否包含,大小写敏感
              • startswith、endswith:以value开头或结尾的数据,大小写敏感
              • 以上在前面加上i就不区分大小写····
              • isnul、isnotnull:是否为空
              • in:是否包含在范围内
              • gt(大于),gte(大于等于),lt(小于),lte(小于等于):
              • 用法:stu = student.object.fiter(表名+_+gt=20)
                year/month/day/week_day/hour/minute/second/等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值