Django ORM 常用的13个方法
介绍一个可以以py脚本方式运行ORM操作的方法:
可在项目内新建个py文件,复制项目内manage.py文件中的以下代码:
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ORM1.settings")
import django # 手动添加导入
django.setup() # 启动
form app01 import models # 从项目app内导入models
然后就可以以右键运行的方式来操作ORM语句了.
一. 必会的13条方法:
-
models.Book.objects.all() # 获取到所有的书籍对象,结果是对象列表
-
models.Book.objects.get(条件) # 获取符合条件的对象
-
models.Book.objects.filter(条件) # 筛选所有符合条件的,结果是对象列表
-
models.Book.objects.exclude(条件) # 筛选出所有不符合条件的,结果是对象列表
-
models.Book.objects.all().values( ) # 字典列表,[ {id:1,name:20} , {id:2,name:18} ]
values(‘id’)括号内不指定时显示全部,如指定则只显示指定的,[ {id:1} , {id:2,} ]
-
models.Book.objects.all().values_list( ) # 元组列表,[ (1,20) , (2,18) ]同上,指定时显示指定内容
-
models.Book.objects.all().order_by(‘id’) # 按照id升序就行排列
models.Book.objects.all().order_by(‘-id’) # 按照id降序就行排列
models.Book.objects.all().order_by(‘age’ , ‘-id’) # 先按age升序,age相同的按id进行降序排列
-
models.Book.objects.all().order_by(‘id’).reverse() # 对结果反转; 注意reverse前必须排序,
否则reverse无效; 或在model.py文件中Book类中的Meta中指定ordering=(‘id’ , )注意逗号必须有
-
distinct(): # 去重,当获取到的结果Queryset列表中同一对象出现多次时去重,只留一个
-
models.Book.objects.all().count() # 计数,可统计结果个数,如对Queryset内元素数进行统计.
-
models.Book.objects.all().first() # 获取结果中的第一条,即使前面结果列表为空,也不会报错
-
models.Book.objects.filter().last() # 获取结果中的最后一条
13.models.Book.objects.filter().exists() # 判断Queryset列表是否有东西,结果为True或False;
二. 小结:
返回对象列表(Queryset)的方法有:
all() filter() ordey_by() exclude() values() values_list() reverse() distinct()
返回单个对象的方法有:
first() last() get() create()创建一个对象,且返回刚创建的对象
判断布尔值的有:
exists()
返回数字的有:
count()
函数名称或修饰词 | 说明 |
---|---|
filter() | 返回符合指定条件的QuerySet |
exclude() | 返回不符合指定条件的QuerySet |
ordey_by() | 串接到QuerySet之后,针对某一指定的字段进行排序 |
all() | 返回所有的QuerySet |
get() | 获取指定符合条件的唯一元素,如果找不到或有一个以上符合条件,都会产生exception |
first()/last() | 获取第1个和最后一个元素 |
aggregate() | 可以用来计算数据项的聚合函数 |
exists() | 用来检查是否存在某指令条件的记录,通常附加在filter后面 |
update() | 用来快速更新某些数据记录中的字段内容 |
delete() | 删除指定的记录 |
iexact | 不区分大小写的条件设置 |
contains/icontains | 设置条件为含有某一字符串就符合,如SQL语句中的LIKE和ILIKE |
in | 提供一个列表,只要符合列表中任何一个值均可 |
gt/gte/lt/le | 大于/大于等于/小于/小于等于 |