Django 模型的增删改查
在这里假设我们创建的模型名为Model
增
Model.objects.create(**kw)
如果新建了一个Model对象则需要对该对象调用save()
方法才能保存
查
- 查所有:
Model.objects.all()
- 查询结果是否非空(速度比len和bool更快):
Model.objects.all().exists()
- 支持切片,但不支持负索引,可以改用
.reverse()
方法倒序查询
- 查询结果是否非空(速度比len和bool更快):
- 查匹配条件的一个:
Model.objects.get(**kw)
- 尝试查,若查不到则增:
Model.objects.get_or_create(**kw)
返回值
(object,True或False)
,增为True
,查为False
- 查匹配条件的所有:
Model.objects.filter(**kw)
<字段名>__iexact
:不区分大小写<字段名>__contains
:包含<字段名>__icontains
:包含且不区分大小写<字段名>__regex
:正则<字段名>__iregex
:正则且不区分大小写
- 查不匹配条件的所有:
Model.objects.exclude(**kw)
- 计数:
.count()
- 排序:
.order_by(字段名)
- 在字段名前加
-
可以实现倒序排序 .order_by("?")
可以实现随机排序(速度较慢)
- 在字段名前加
- 去重:
.distinct()
- 排除不需要的字段:
.defer(*字段名)
- 仅选择需要的字段:
.only(*字段名)
- 获取元组形式结果:
.values_list(**kw)
如果只需要1个字段,可以指定
flat=True
- 获取字典形式的结果:
.values
删
查之后调用.delete()
,既适用于单个对象也适用于QuerySet。
改
- 多个对象(QuerySet):查之后调用
.update(**kw)
- 单个对象:查之后为对象的属性赋值,在此之后需要对该对象调用
save()
方法才能保存
其他
query
属性返回了SQL的执行细节,取str
后可返回执行的SQL语句
关于聚合查询,定义别名,多表联查的用法,可以参考Django QuerySet 进阶 - Django 教程 - 自强学堂