ORM 数据操作
ORM 数据操作
Pupper一、 多级路由转发
1. Django 的路由分发
1 | from django.urls import path, include |
二、 数据库模型 —- ORM
Object Relational Mapping
对象关系映射
ORM 的优势 : 利用编程语言方便操作数据库,无需掌握复杂的 sql 语句
1. ORM 用法
- 数据模型定义在 APP 目录下的
models.py
中 - 模型类继承 Django 的
models.Model
模型基本类 - 类名对应表名称,实际是小写应用名_小写模型类名
- 类成员对应数据的字段类型
2. 数据库常用字段类型
常用字段
CharField
: 字符串类型, 必须接收一个 max_length 参数
, 表示字符串最大长度
BooleanField
: 布尔值类型, 默认为 None
DateTimeField
: 日期时间类型, python 的 datetime.datetime 实例
IntegerField
: 整数类型,范围 -2,147,483,648 到 2,147,483,647 。
字段 参数
null
: 如果是 True,Django 将在数据库中存储空值 NULL, 默认为 False
default
: 默认值。可以是一个值,也可以是一个可调用的对象,不能是一个可更改的对象
unique
: 如果设置为 true,这个字段在整个表中保持值唯一。 默认为 False。若为 True 该字段可以成为一个唯一索引
verbose_name
: 字段备注名。如果没有给定详细名称,Django 会使用字段的属性名自动创建,下划线转换为空格
primary_key
: 如果设置为 True,将该字段设置为该模型的主键,最多只有一个字段被设置,如果没有设置,Django 会自带创建一个名为 ID 的字段作为主键
三、 数据库的激活与迁移
1. 数据模型配置
settings.py
设置对应的数据库连接信息- 如果用默认的 sqlite 作为开发数据库可以不用设置
settings.py
关联对应数据所在的 app- 即 为应用注册
2. 数据迁移命令
修改数据库后,需要运行这两个命令同步数据库
生成模型迁移文件(此时不操作数据库)
1
python manage.py makemigrations
同步到数据库(此时操作数据库)
1
python manage.py migrate
四、 数据库 API 操作
1. Django 自动命令行
1 | python manage.py shell |
2. 模型管理器(Manager)
模型管理器 : 管理当前数据模型对应表的 增删改查 操作
只能通过类调用,不能通过实例调用
如 Event.objects
而不是 Event().objects
使用模型管理器 增 查
1 | 增 |
1 | 查 |
3. 增、删、改、查
1. 增
1 | Model.objects.create(**kw) |
2. 删
1 | modelObj.delete() |
3. 改
1 | new_modelObj.save() |
4. 查
1 | Model.objects.filiter(**kw) |
查询所有 select * from 表名
Model.objects.all()
: 返回 QuerySet 对象
过滤查询条件 select * from 表名 where xxx
Model.objects.filter(**kw)
: 返回 QuerySet 对象Model.objects.values(**kw)
: 返回 QuerySet 对象(内容时数据键值对)
- 查询单个 select * from 表名 where xxx limits=1
Model.objects.get(**kw)
: 返回单个模型数据对象,如果结果超过或者少于 1 个抛出异常
- 快捷操作查
get_object_or_404(模型类,**kw)
**KW
: 表示查询参数,对应数据库字段名:值
五、 Django 自带 admin 后台
1. 注册 超级用户
1 | python manage.py createsuperuser |
页面地址:
http://127.0.0.1:8000/admin/
2. 后台数据关联数据模型
在 admin.py
文件中修改
1 | from sgin import models |
3. 修改显示信息
在 models.py
文件中修改
1 | def __str__(self): |
4. 通过 数据库表的主键(id)来实现页面跳转
1 | from django.urls import path |
</code-block>
1 | def events(request): |
</code-block>
1 | {% extends "sgin/base.html" %} {% block content %} |
</code-block>
</code-group>
六、 数据库表关联
1. 外键的定义方式(多对 1)
1 | models.ForeignKey(目标模型类, on_delete=models.CASCADE) |
此外键定义在多对一方
on_delete 可选项
CASCADE
: 模拟 SQL 语音中的 ON DELETE CASCADE 约束,将定义有违建的模型对象同时删除PROTECT
: 组织上面的删除操作,但是弹出 ProtectedError 异常SET_NULL
: 将外键字段设置为 null, 只有当字段设置了 null=True 时,方可使用该值SET_DEFAULT
: 将外键字段设置为默认值。只有当字段设置了 default 参数时,方可使用DO_NOTHING
: 什么也不做SET()
: 自定义值,参数可以为常量或者回调函数的返回值
1 | # 关联发布会 |
2. 外键的定义方式(多对多)
1 | modelsManyToManyField(目标模型类) |
只可以在一方定义,不可以两方同时定义