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")