1、条件查询-方法
filter(条件)
- 语法:MyModel.object.filter(属性1=值1,属性2=值2)
- 作用:返回 包含此条件的全部的数据集
- 返回值:
- QuerySet容器对象,内部存放 MyModel 模型类的实例
- 返回一个list类型的需要循环,下标取值
说明:
语法:MyModel.object.exclude(条件)
- 作用:返回 不包含此条件的全部的数据集
返回值:
语法:MyModel.object.get(条件)
- 作用:返回 满足条件的唯一一条数据
- 说明:该方法只能返回一条数据(模型类的实例)
- 查询结果多余一条数据则抛出 .Model.MultipleObjectsReturned 异常
- 查询无结果 也会报错
2、查询谓词
思考?如何做非等值的过滤查询(如 where id>1)
定义:做更灵活的条件查询时需要使用查询谓词
说明:每一个查询谓词是一个独立的查询功能
2.1、常用查询谓词
| 谓词 | 作用 | 示例 |
|---|---|---|
| __exact | 等值匹配 | MyModel.object.filter(id__exact=1) 等同于 select * from mymodel where id = 1 |
| __contains | 包含指定值 | MyModel.object.filter(__contains=’w’) 等同于 select * from mymodel where name like ‘%w%’ |
| __startswith | 以xxx开头 | |
| __endswith | 以xxx结尾 | |
| __gt | 大于指定值 | MyModel.object.filter(age__gt=50) 等同于 select * from mymodel where age>50 |
| __gte | 大于等于 | |
| __lt | 小于 | |
| __lte | 小于等于 | |
| __in | 查找数据是否在指定范围内 | MyModel.object.filter(country__in=[‘中国’,’日本’,’韩国’]) 等同于 select * from mymodel where country in(‘中国’,’日本’,’韩国’) |
| __range | 查找数据是否在指定的区间范围内 | MyModel.object.filter(age__range=(35,50)) 等同于 select * from mymodel where age BETWEEN 35 and 50; |
##### 查询条件 = != > < >= <= and or not in in order by group by# print(models.Teacher.objects.exclude(name="王老师")) # 不等于# print(models.Teacher.objects.filter(id__gt=3)) # 大于# print(models.Teacher.objects.filter(id__gte=3)) # 大于等于# print(models.Teacher.objects.filter(id__lte=3)) # 小于等于# print(models.Teacher.objects.filter(id__lt=3)) # 小于# print(models.Teacher.objects.filter(id__in=[1, 2, 3])) # 在范围里# print(models.Teacher.objects.exclude(id__in=[1, 2, 3])) # 不在xx里# print(models.Teacher.objects.filter(name__endswith="张")) # 某个字段以xx结尾# print(models.Teacher.objects.filter(name__startswith="老师")) # 某个字段以xx开头# print(models.Article.objects.filter(content__contains="vue")) # like# print(models.Article.objects.all().order_by('-id')) # 倒序排序# print(models.Article.objects.filter().order_by('-id'))# result = models.Article.objects.filter(Q(id=1) | Q(id=2))# print(result)# # print("!!!!!!!1",models.Article.objects.raw('select * from user_article'))# r = models.Article.objects.raw('select * from user_article') # 执行原生的sql# for i in r:# print(i)
3、Q对象 “或”
ORM “或”条件查询的使用
from django.db.models import Q # orm “或”条件的使用result = models.Article.objects.filter(Q(id=1) | Q(id=2)) # id =1 or id =2print(result)
4、原生数据库操作
Django也可以支持 直接使用SQL语句的方式通信数据库
查询:使用MyModel.object.raw(sql语句)进行数据库查询操作
语法:使用 MyModel.object.raw(sql语句)
返回值:RawQuerySet 集合对象【只支持基础操作,比如循环】
books = models.Book.objects.raw('select * from bookstore_book')for book in books:print(book)
