0. 准备
url.py
path('orm_text/', view01.OrmText, name='orm_text'),
model.py
class Author(models.Model):
name = models.CharField(verbose_name='名称', max_length=225)
# 返回对象,但以这个人的名称显示
def __str__(self):
return self.name
class Books(models.Model):
name = models.CharField(verbose_name='名称', max_length=225)
# 一对多,外键写在多的一方
author = models.ForeignKey(verbose_name='作者', to='Author', related_name='books', on_delete=models.CASCADE)
def __str__(self):
return self.name
一. 13.条orm语句
<1> all(): 查询所有结果
<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
<4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
<5> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列
<6> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
<7> order_by(*field): 对查询结果排序
<8> reverse(): 对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的QuerySet上调用(在model类的Meta中指定ordering或调用order_by()方法)。
<9> distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。)
<10> count(): 返回数据库中匹配查询(QuerySet)的对象数量。
<11> first(): 返回第一条记录
<12> last(): 返回最后一条记录
<13> exists(): 如果QuerySet包含数据,就返回True,否则返回False
二. 使用
1. all()--->查询所有结果--->返回queryset对象集合
def OrmText(request):
print('1')
all_queryset = models.Books.objects.all()
print(all_queryset) # <QuerySet [<Books: 国产>, <Books: 欧美>, <Books: 日韩>, <Books: 国产2>]>
return HttpResponse('ok')
2. filter()--->过滤(精准查询,不是模糊匹配)--->返回queryset对象集合
def OrmText(request):
all_queryset = models.Books.objects.filter(name='国产')
print(all_queryset) # <QuerySet [<Books: 国产>]>
return HttpResponse('ok')
.3. get()--->查询一条对象--->返回一个对象--->注意:如果符合筛选条件的对象,超过一个或者没有都会抛出错误
def OrmText(request):
one_objets= models.Books.objects.get(name='国产')
print(one_objets) # 国产
return HttpResponse('ok')
4. exclude()--->去除(它包含了,与所给筛选条件不匹配的对象)--->返回queryset对象集合--->一般与all/filter连用
def OrmText(request):
all_queryset = models.Books.objects.all().exclude(name='国产')
print(all_queryset) # <QuerySet [<Books: 欧美>, <Books: 日韩>, <Books: 国产2>]>
return HttpResponse('ok')
5. values()--->把所需数据,以列表套字典的形式返回--->返回queryset对象集合--->一般与all/filter连用
def OrmText(request):
all_queryset = models.Books.objects.all().values('id', 'name')
print(all_queryset) # <QuerySet [{'id': 1, 'name': '国产'}, {'id': 2, 'name': '欧美'}, {'id': 3, 'name': '日韩'}, {'id': 4, 'name': '国产2'}]>
return HttpResponse('ok')
6. values_list()--->把所需数据,以列表套元组的形式返回--->返回queryset对象集合--->一般与all/filter连用
def OrmText(request):
all_queryset = models.Books.objects.all().values_list('id', 'name')
print(all_queryset) # <QuerySet [(1, '国产'), (2, '欧美'), (3, '日韩'), (4, '国产2')]>
return HttpResponse('ok')
7. order_by()--->排序(默认升序,里面可以添加多个参数,如果第一个参数不存在,就以第二个参数进行排序,以此类推)--->返回queryset对象集合--->一般与all/filter连用
def OrmText(request):
all_queryset = models.Books.objects.all().order_by('id')
print(all_queryset) # <QuerySet [<Books: 国产>, <Books: 欧美>, <Books: 日韩>, <Books: 国产2>]>
return HttpResponse('ok')
8. reverse()--->反转(请注意reverse()通常只能在具有已定义顺序的QuerySet上调用)--->返回queryset对象集合--->一般进行排序之后使用
def OrmText(request):
all_queryset = models.Books.objects.all().order_by('id').reverse()
print(all_queryset) # <<QuerySet [<Books: 国产2>, <Books: 日韩>, <Books: 欧美>, <Books: 国产>]>
return HttpResponse('ok')
9. distinct()--->去重(从返回结果中剔除重复纪录)--->返回queryset对象集合--->一般进行value_list/value之后使用
def OrmText(request):
all_queryset = models.Books.objects.all().values_list('name').distinct()
print(all_queryset) # <QuerySet [('国产',), ('欧美',), ('日韩',), ('国产2',)]>
return HttpResponse('ok')
10. count()--->统计--->返回int--->一般进行all()/value_list/value之后使用
def OrmText(request):
count_int = models.Books.objects.all().count()
print(count_int) # 4
return HttpResponse('ok')
11. first()--->返回第一条记录--->返回对象--->
def OrmText(request):
book_object = models.Books.objects.first()
print(book_object) # 国产
return HttpResponse('ok')
12. last()--->返回最后一条记录--->返回对象--->
def OrmText(request):
book_object = models.Books.objects.last()
print(book_object) # 国产2
return HttpResponse('ok')
13. exists()--->是否有查询的数据,有返回True,无False--->返回布尔值--->
def OrmText(request):
book_object = models.Books.objects.filter(name='xx').exists()
print(book_object) # False
return HttpResponse('ok')
三. 总结
orm语句查询返回值一共4种类型
QuerySet对象集合(模型对象):all,filter,exclude,values,values_list,order_by,reverse,distinct
int:count
布尔:exists
对象:first,last,get