Published in:2024-10-24 |

orm

1
2
3
一个class -> 一张表
一个model对象-> 一行数据
一个属性->一列数据

model层开发流程

1
2
3
4
5
6
7
创建app
挂载app
settings.py 配置数据库 引擎 ....键值对
去app下的models文件 书写model类(属性对应的是列名,值是models.对象)
float->double text->longtext char->varchar Bloon->tinyint
生成迁移记录 python manage.py makemigrations
执行迁移 python manage.py migrate

元数据

1
2
3
4
在model类中再定义一个类 Meta
db_table='新表名'
unique_together='元祖'或者二维元祖
ordering=['name'] 降序:-

字段参数

1
2
3
4
null=True 可以为空
defualt='hehe' 默认 不可以作用于数据库
db_index=True 添加索引
unique=True 设置为唯一

1
2
3
4
1. 创建model对象 User(参数)
model对象要.save()
2. 使用queryset的create()创建
User.objects.create(参数)

删除

1
2
3
1. 获取到model对象
user = User.objects.get(pk=1).delete()
user = User.objects.filter(pk=1)[0].delete()

修改

1
2
3
4
1. 获取到model对象
user = User.objects.get(pk=1)
user.name = 'sun'
user.save()

查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1. 所有的查询操作(调用方法)都是queryset对象调用的
2. 查询方法
1.get() -> 只能返回一条数据(否则报错) 一个model对象
2.all() -> 返回所有数据 一个queryset对象 里面盛放所有的model对象
3.filter() -> 一个queryset对象 如果没有查到数据 返回一个空queryset
4.exclude() -> 与filter相反
5.count() -> int 返回的查询结果的条目数
6.values() -> 一个queryset对象 每一行数据都是一个字典 values里可以传参数
values('name')
7.order_by() -> 选择排序方式 order_by('name') 降序:-
8.aggregate() -> aggregate(聚合函数)
User.objects.all().aggregate(mm=Max('age')) --> 字典['mm']-->取值
查询queryset中的最大年龄
9.annotate()
分组
语法
User.objects.values().annotate()
以什么分组values里就写什么
eg: 以年龄分组
User.objects.values('age').annotate()
eg: 以年龄分组,求每个年龄组中的最大年龄
User.objects.values('age').annotate(Max('age'))
Prev:
Next: