zoukankan      html  css  js  c++  java
  • ORM 之单表查询案例

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

      

  • 相关阅读:
    apollo使用场景2
    我问问
    洛谷 P3979 遥远的国度
    小技巧—对拍和输出文件的比较
    洛谷 P6850 NOI
    小技巧—双向边快速枚举
    ZJOI 2008 骑士
    小技巧—指数形式的枚举
    小技巧—滚动数组
    刷题心得—背包问题的枚举方式
  • 原文地址:https://www.cnblogs.com/NGU-PX/p/14251492.html
Copyright © 2011-2022 走看看