1. 获取所有数据
results = models.Student.objects.all().values()
2. 判断相等
results = models.Student.objects.filter(gender='男')
results = models.Student.objects.filter(gender__exact='男')
results = models.Student.objects.filter(sage__exact=None)
3. 大于小于
# 年龄大于等于25岁
results = models.Student.objects.filter(sage__gte=25)
# 年龄小于等于25岁
results = models.Student.objects.filter(sage__lte=25)
4. in--- 在某一个list范围内
# 查询出姓名登录Alice,bob
results = models.Student.objects.filter(sname__in =['Alice','Bob'])
4. range-- 某一个范围 ,相当于SQL中的Between --- and ---
results = models.Student.objects.filter(sage__range =(25,30))
5. 判断是空 --isnull
results = models.Student.objects.filter(sage__isnull=True)
==================练习=============
查询出姓名为“陈鹏”的学号、手机号码和邮箱地址
results = models.Student.objects.filter(sname='陈鹏')
results = models.Student.objects.filter(sage__exact='陈鹏')
results = models.Student.objects.filter(sage__in=['陈鹏'])
查询出姓名不是“陈鹏”的学生的所有信息
results = models.Student.objects.exclude(sname__exact='陈鹏')
查询出大于25的女生的学生信息
results = models.Student.objects.filter(sage__gte=25, gender__exact='女')
查询出学生年龄介于20到30间的学生学号和姓名
results = models.Student.objects.filter(sage__range=(20,30))
查询哪些学生没有填写“年龄”信息
results = models.Student.objects.filter(sage__exact=None)
results = models.Student.objects.filter(sage__isnull=True)
查询出“陈鹏”,”Alice”,”Bob”的学号,年龄
results = models.Student.objects.filter(sname__in=['Alice','Bob','陈鹏'])
=================模糊查询 ================
1. 模糊查询 --- startswith, endswith, contains
# 查询出以134开头的手机号码
students = models.Student.objects.filter(stumobile__startswith='134').values()
# 查询出以8开头的手机号码
students = models.Student.objects.filter(stumobile__endswith='5').values()
# 查询手机号码中包含88
students = models.Student.objects.filter(stumobile__contains='88').values()
====模糊查询练习====
查询出所有姓“陈”的学生
students = models.Student.objects.filter(sname__startswith='陈').values()
查询出手机号码134或者135开头,倒数第四位为不是7也不是8的学生姓名
students = models.Student.objects.filter(stumobile__regex=r'^[1][3][45][0-9]{4}[^78][0-9]{3}$' ).values
查询出借过书的同学的学号
results = models.Borrowbook.objects.all().values("sno_id").distinct()
对Student表按照年龄升序排序,如果年龄一样,女生排在男生前面
results = models.Student.objects.all().order_by('sage','gender').values()
查询出Student表中的前5行记录
results = models.Student.objects.all()[0:5].values()
===== 聚和函数练习 ===========
1. 统计出学生最大年龄,最小年龄
results = models.Student.objects.aggregate(max_age = Max('sage'), min_age = Min('sage'))
2. 查询出男生的平均年龄
results = models.Student.objects.filter(gender__exact='男').aggregate(avg=Avg('sage'))
3. 查询出有多少位学生借书
results = models.Borrowbook.objects.aggregate(number = Count('sno',distinct=True))
4. 查询出计算机类的图书总共有多少本
results = models.Book.objects.filter(booktype__exact=1).aggregate(sum_num = Sum('booksumno'))
====分组查询 -=====
# 统计出男女生的人数
results = models.Student.objects.values('gender').annotate(number=Count('gender'))
# 统计出每一类书中的最高的价格
results = models.Book.objects.values('booktype').annotate(maxprice=Max('bookprice'))
# 统计出每一类书中的最高的价格大于等于45元
results = models.Book.objects.values('booktype').annotate(maxprice=Max('bookprice')).filter(maxprice__gte=45.0)
# 查询出借的超过两本的书的ID号及数量
results = models.Borrowbook.objects.values('bookid').annotate(number=Count('id')).filter(number__gt=2)
# 统计出借书多于两本的学生学号以及数量,按照数量的降序排列
results = models.Borrowbook.objects.values('sno').annotate(number=Count('id')).filter(number__gt=2).order_by('-number')
====连接查询=======
# 由一查多 : 给定的条件在主键表中,要查询的内容在外键表中 --- 正向查询
# 比如查询:李明志 写了哪些书?
# 多类名.objects.filter(关联属性__一类属性名=具体条件)
results = models.Book.objects.filter(bookauthor__authorname__exact='李明志').values()
# 由多查一: 给定的条件在外键表中,要查询的内容在主键表中 --- 反向查询
# 比如:查询95006这本书的出版社
# 公式: 一类名.objects.filter(多类名小写__多类属性名=具体条件
results = models.Press.objects.filter(book__bookid__exact=39006).values()
# 查询出陈鹏所借的图书id
# Student : BorrowBook 关系 : 1对多 有一查多
results = models.Borrowbook.objects.filter(sno__sname__exact='陈鹏').values()
# 95005的书被哪些同学借
# 由BorrowBook 去查 Student 关系: 多查一
results = models.Student.objects.filter(borrowbook__bookid__exact=39009).values()
# 多表连接案例01:查询出陈鹏所借的图书的作者
# 表的关联图:
# Student --1:多--> BorrowBook --多:1--> Book --多:1--> Author
# Author <---1:多 ---Book <--1:多 ---BorrowBook <-- 多:1----Student
#book__borrowbook__sno__sname = '陈鹏'
results = models.Author.objects.filter(book__borrowbook__sno__sname='陈鹏').distinct().values()
# 多表连接案例02:查询出计算机类的图书有哪些同学借
# 表的关联图
# Student <--1:多 -- Borrowbook <-- 多:1--Book<-- 多:1--BookType
# borrowbook bookid booktype typename='计算机'
results = models.Student.objects.filter(borrowbook__bookid__booktype__typename='计算机').distinct().values()
# 输入返回对象类型
print("返回对象类型:", type(results))
print(results)
数据库开发之ORM
最新推荐文章于 2022-10-11 10:01:36 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)