模型
-
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', } }
- 工程目录下的__init__.py文件中修改
-
开发流程;
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:
自定义模型管理器
- objects\
- 名称 = 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
- get():返回一个满足条件的对象
- 限制查询集:
- 查询集返回列表,可以使用下标的方法进行限制,等同于sql中的init语句
studentlist = Students,stuObj2.all()[0:5] - 注意:下标不能是负数
- 查询集返回列表,可以使用下标的方法进行限制,等同于sql中的init语句
- 查询集的缓存
概念:每个查询集都包含一个缓存,来最小化的对数据库访问 在新建的查询集中,缓存首次(新建的)为空,第一次对查询集求值,会发生数据缓存,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/等
- 概念:实现了数据库中的where语句,作为方法filter(),exclude(),get()的参数
- 概述;
- 类属性: (查询器) 数据库取数据