Django学习笔记(2)

DjangoModels

开发流程

  • 配置数据库
  • 定义模型类(一个模型类对应数据库中一张表)
  • 生成迁移文件
  • 执行迁移数据表
  • 使用模型类进行增删改查

ORM

  • 对象关系映射
  • 可以理解为翻译机
  • 核心思想,解耦合
    • 业务逻辑和SQL解耦

数据库中数据类型

  • 字符串
  • 数字
  • 日期时间

模型过滤

  • filter
  • exclude
  • 连续使用
    • 链式使用
    • Person.objects.filter().filter().exclude()
    • persons = Person.objects.exclude(p_age__lt=50)

创建模型

class Person(models.Model):
    p_name = models.CharField(max_length=16, unique=True)
    p_age = models.IntegerField(default=18, db_column='age')
    # False 代表男, True代表女
    p_sex = models.BooleanField(default=False, db_column='sex')
    class Meta:
        db_table = 'people'

快捷键

  • .re 快速生成return
  • . if

方法

  • 对象方法
    • 可以调用对象的属性,也可以调用类的属性
  • 类方法
    • 不能调用对象属性,只能调用类属性
  • 静态方法
    • 啥都不能调用
    • 只是寄生在这个类上

状态码

  • 2XX
    • 请求成功了
  • 3XX
    • 转发、重定向
  • 4XX
    • 客户端错误
  • 5XX
    • 服务器错误
    • 后端最不想看到的

获取单个对象

  • get() 返回一个满足条件的对象
    • 获取查询条件没有匹配对象,会抛出异常, DoesNotExit
    • 如果查询条件对应多个对象,会抛出异常, MultipObjectsReturned
  • count() 返回当前查询集中的对象个数
  • exists() 判断查询集中是否有数据

获取first和last

  • 默认情况下正常从QuerySet中获取
  • 出现bug,需要手写排序规则

切片

  • 和python中切片不太一样
  • QuerySet[5:15] 获取第五条到第十五条数据
    • 相当于SQL语句中的limit和offset

查询集缓存

  • filter
  • exclude
  • all
  • 都不会真正的去查询数据库
  • 只有在迭代结果集,或者获取单个对象属性,才会去查询数据库
  • 懒查询
    • 为了优化结果和查询

查询条件

  • 属性 __运算符=值
  • gt
  • lt
  • gte
  • lte
  • in 在某一集合中
  • contain 类似于 模糊查询 like
  • startswith 以xx开始,本质是 like
  • endswith 以xx结束,本质是like
  • exzct
  • 前面同时添加i,ignore 忽略
    • iexact
    • icontains
    • istartswith
    • iendswith
  • django中查询条件有时区问题
    • 关闭django中自定义时区
    • 在数据库中常见对应的时区表

Django中有各种数据库操作,可以便捷对级联的表查询。

grades = Grade.objects.filter(student__s_name="jack")   # 查询Jack的班级
result = Customer.objects.aggregate(Max("c_cost"))   # 查询最大花费的顾客

F对象

  • 可以获得我们属性的值
  • 可以获得一个模型不同属性的运算操作
  • 还可以支持算术操作
    company = Company.objects.filter(c_boy_num__lt=F('c_girl_num')) # 比较男女的人数

Q对象

  • 可以对条件进行封装
  • 封装后支持逻辑运算
    • 与 &
    • 或 |
    • 非 ~
      company = Company.objects.filter(Q(c_boy_num__gt=1) & Q(c_girl_num__gt=5))

模型成员

  • 显性属性
    • 开发者手动书写的属性
  • 隐性属性
    • 开发者没有书写
    • 如果你把隐性属性手动声明了,系统不会再为你产生隐性属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值