python_Django06----Model

settings.py 中需要配置的信息

ALLOWED_HOSTS = ["*"]

INSTALLED_APPS 中加入项目下各应用的名称

DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: 项目名,
‘USER’: 数据库用户名,
‘PASSWORD’: 数据库用户密码,
‘PORT’: ‘端口号(3306)’,
‘HOST’: ‘主机(localhost)’,
}
}

LANGUAGE_CODE = ‘zh-hans’

TIME_ZONE = ‘Asia/Shanghai’

如果在项目下创建 templates 文件,而不是在应用下面创建,还需要修改:
TEMPLATES 中的 DIRS ,在 DIRS 中添加os.path.join(BASE_DIR, “templates”

开发流程

  1. 配置数据库
  2. 定义模型类(一个模型类对应数据库中的一张表)
  3. 生成迁移文件
  4. 执行迁移生成数据表
  5. 使用模型类进行增删改查(CRUD)操作

配置数据库

pip install pymysql

在工程目录下的 init.py 中输入

import pymysql
pymysql.install_as_MySQLdb()

完成数据库驱动加载

Django 定义模型

一个模型类在数据库中对应一张表,在模型类中定义的属性,对应该模型对照表中的一个字段
创建模型类
元选项,在模型类中定义Meta,用于设置元信息

    class Meta:
        db_table = 'xxx'  定义数据表名,推荐使用小写字母
        ordering = []   对象的默认排序字段,获取对象列表时使用,通常是interger类型,升序ordering["id"],降序ordering["-id"]

Django 默认通过模型的 objects 对象实现模型数据查询
Django 有两种过滤器用于筛选记录
filter 返回符合筛选条件的数据表
exclude 返回不符合筛选条件的数据集
多个 filter 和 exclude 可以连接在一起查询

创建对象
当创建对象时,django不会对数据库进行续写操作,当调用save()方法时才与数据库交互,将对象保存到数据库中
注意:init 已经在父类models.Model中使用,在自定义的模型中无法使用

三种创建对象的方法:

第一种:
        person = Person()
        person.p_name = xxx
        person.p_age = xxx
        person.p_sex = xxx
        person.save()
第二种:
		person = Person.objects.create(p_name="xxx", p_age=xxx, p_sex=xxx)
    # person = Person(p_age=xxx)
第三种:
    person = Person.create("jack")
    person.save()
    创建对象方法:
				在模型类中增加类方法去创建对象
				@classmethod
				def create(cls,(数据库表中的数据))
				在自定义的管理器中添加方法来创建对象

查询集表示从数据库获取的对象集合
查询集可以有多个过滤器
过滤器就是一个函数,基于所给的参数限制查询集结果
从 SQL 角度来说,查询集合和 select 语句等价,过滤器就像 where 条件
查询经过过滤器筛选后返回新的查询集,所以可以写成链式调用
返回查询集的方法称为过滤器
all() 返回所有数据
filter() 返回符合条件的数据
exclude() 过滤掉符合条件的数据
order_by() 排序
values() 一条数据就是一个字典,返回一个列表

返回单个数据
get(): 返回一个满足条件的对象
如果没有找到符合条件的对象,会引发 模型类 DoesNotExist异常
如果找到多个,会引发 模型类 MultiObjectsReturned 异常
first(): 返回查询集中的第一个对象
last(): 返回查询集中的最后一个对象
count(): 返回当前查询集中的对象个数
exists(): 判断查询集中是否有数据,如果有数据返回True没有反之

  # person = Person.objects.get(p_age=98)
    # print(person.p_name)
    # person = Person.objects.first()
    # print(person.p_name)
    # person = Person.objects.all().first()
    # print(person.p_name)
    # person = Person.objects.last()
    # print(person.p_name)
    # person_one = Person.objects.all().last()
    # print(person_one.p_name)
    count = Person.objects.count()

限制查询集和查询集的缓存

限制查询集,可以使用下标的方法进行限制,等同于 sql 中的 limit
studentList = Student.objects.all()[0:5] 下标不能是负数

查询集的缓存,每个查询集都包含一个缓存,来最小化对数据库的访问
在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,django 会将查询出来的数据做一个缓存,并返回查询结构,以后的查询直接使用查询集的缓存
filter , exclude , all 都不会真正的去查询数据库,只有我们在迭代结果集,或者获取单个对象值属性的时候,它才会去查阅数据库,称为懒查询

聚合函数
使用 aggregate() 函数返回聚合函数的值
Avg: 平均值
Count: 数量
Max: 最大
Min: 最小
Sum: 求和
Student.objects().aggregate(Max(‘s_age’))

F 对象
可以使用模型的 A 属性与 B 属性进行比较
companys = Company.objects.filter(c_boy_num__lt=F(‘c_girl_num’))
F 对象支持算术运算
companys = Company.objects.filter(c_boy_num__lt=F(‘c_girl_num’)-15)

Q 对象
可以对条件进行封装
封装之后,可以支持逻辑运算
与 & and
或 | or
非 ~ not

模型成员

  • 显性属性
    开发者手动书写的属性

  • 隐性属性
    开发者没有书写,ORM自动生成
    如果你把隐性属性手动声明了,系统就不会为你自动生成隐性属性了

     自定义管理器类
     		模型管理器是Django的模型与数据库进行交互的接口,一个模型可以有多个模型管理器
     		自定义模型管理器作用:
     						可以向管理器中添加额外的方法
     						修改管理器返回的原始查询集
     						提供创建对象的方式
    
class AnimalManager(models.Manager):
    def get_queryset(self):
        return super(AnimalManager, self).get_queryset().filter(is_delete=False)

    def creat_animal(self, a_name='chicken'):
        a = self.model()
        a.a_name = a_name
        return a


class Animal(models.Model):
    a_name = models.CharField(max_length=16)
    is_delete = models.BooleanField(default=False)
    a_m = models.Manager()
    a_m1 = AnimalManager()
def get_animals(request):
    animals = Animal.a_m.filter(is_delete=False)
    animals1 = Animal.a_m1.all()
    for animal in animals:
        print(animal.a_name)
    print("xxxxxxxxxxxxxxxxx")
    for animal1 in animals1:
        print(animal1.a_name)
    return HttpResponse("get success")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值