ORM单表查询
from django.shortcuts import render,HttpResponse from app1.models import Book # Create your views here. def select(request): # 1.all 查询所有数据 data = Book.objects.all() print(data) # 2.count 获取数据总数 select count(*) from book res = data.count() print(res) # 3.first: 返回的第一条数据对象 res = data.first() print(res) print(res.id,res.title) # 4.last: 返回的最后一个数据对象 res = data.last() print(res.id) # 5.order_by 排序(正序) order by id asc data = Book.objects.order_by('id') print(data) # 6.order_by 排序(倒序) reverse order by id desc 推荐; data = Book.objects.order_by('id').reverse() print(data) # 扩展写法 [可以在排序的字段前面加上-,表达倒序] 不推荐; data = Book.objects.order_by('-id') print(data) # 7.filter 按条件查询[相当于where] 返回的queryset对象 data = Book.objects.filter(price=81).order_by("-id") # select * from book where price=81 order by id desc for i in data.order_by("-id"): print(i.id) print(data[0].id,"<=====>") # 8.exists(): 如果QuerySet包含数据,就返回True,否则返回False data = Book.objects.filter(id=10) res = data.exists() print(res) # 9.get 返回一个模型类对象 [等价于表对象] # data = Book.objects.get(id=100000) # error 找不到或者找到多条数据都会报错; # print(data) # 10.exclude: 排除符合条件的对象,返回的依然是queryset对象 [表达不等于,除了的概念] data = Book.objects.exclude(id=10) # select * from book where id != 10 print(data) # 11.values 查找某个字段值,返回字典 data = Book.objects.filter(price=78).values("id","title") print(data) # 12.values_list 查找某个字段值,返回元组 data = Book.objects.filter(price=78).values_list("id","title") print(data) # 13.distinct 去重 select distinct(price) from app1_book data = Book.objects.all().values("price").distinct() print(data) # 链式操作(连贯操作) # select "id","title" from book where price = 78 order by id desc data = Book.objects.filter(price=78).values("id","title").order_by("id").reverse() print(data) return HttpResponse("select ok") def select2(request): # 范围查询 # in => __in # select * from book where price in (78,79,90) data = Book.objects.filter(price__in=[78,79,90]) print(data,1) # > => __gt # select * from book where price > 79 data = Book.objects.filter(price__gt=79) print(data,2) # >= => __gte # select * from book where price >= 79 data = Book.objects.filter(price__gte=79) print(data,3) # < => __lt # select * from book where price < 79 data = Book.objects.filter(price__lt=79) print(data,4) # <= => __lte data = Book.objects.filter(price__lte=79) print(data,5) # between .. and .. => __range=[100,200] # select * from book where price between 100 and 200; data = Book.objects.filter(price__range=[100,200]) print(data,6) # like模糊查询 # __contains="金" # like => __contains="金" # select * from book where title like "%瓶%"; data = Book.objects.filter(title__contains="瓶") print(data,7) # like(忽略大小写) # __icontains="a" data = Book.objects.filter(title__icontains="ab") print(data,8) # __startswith="aa" 以..开头 data = Book.objects.filter(title__startswith="三") print(data,9) # __endswith="bb" 以..结尾 data = Book.objects.filter(title__endswith="5") print(data,10) # 针对于date类型 data = Book.objects.filter(id=10).values("pub_date") print(data[0]["pub_date"],11) # select * from book where year(pub_date) = 2021 data = Book.objects.filter(pub_date__year = 2021 ) data = Book.objects.filter(pub_date__month=12) data = Book.objects.filter(pub_date__day=14) print(data , 12) # __year 过滤日期字段的年份 # __month 过滤日期字段的月份 # __day 过滤日期字段的日 # 扩展 正则匹配 mysql可以使用正则 但是不好事,效率低,查询速度低下,不建议使用;了解 data = Book.objects.filter(title__regex="^金.*$") # print(data,11) return HttpResponse("select2 ok")