django查询表记录的十三种方法
all() 结果为queryset类型
>>> models.Book.objects.all()
, , ]>
filter() 条件查询(它下面也有很多种方法,见最下面)
>>> ret = models.Book.objects.filter(id=5)
>>> ret
]>
get() 得到的是一个model对象,有且只能有一个
会出现两种报错
- 1 查不到数据会报错 :Book matching query does not exist.
- 2 返回值超过一个就报错 :returned more than one Book -- it returned 13!
>>> ret = models.Book.objects.get(id=5)
>>> ret
exclude() 排除
- object能够调用,models.Book.objects.exclude(book_name__startswith='活')
- queryset类型数据能够调用。
>>> ret = models.Book.objects.all()
>>> ret.exclude(id=5)
, ]>
order_by() 排序
models.Book.objects.all().order_by('-price','id')
#类似于mysql种的order by price desc,id asc;
reverse() 反转
models.Book.objects.all().order_by('id').reverse()
# 数据排序之后才能反转
count() 计数,统计返回结果的数量
>>> ret = models.Book.objects.all().count()
>>> ret
3
first() 返回第一条数据,结果是model对象类型
>>> ret = models.Book.objects.all()
>>> ret.first()
>>> ret.first().id
5
last() 返回最后一条数据,结果是model对象类型
>>> ret = models.Book.objects.all()
>>> ret.last()
>>> ret.last().id
11
exists() 判断返回结果集是不是有数据
>>> ret = models.Book.objects.filter(id=999).exists()
>>> ret
False
>>> ret = models.Book.objects.filter(id=11).exists()
>>> ret
True
values() (返回的queryset,里面是字典类型数据)
>>> ret = models.Book.objects.all().values('id','book_name')
>>> ret
values_list(返回的queryset,里面是数组类型数据)
>>> ret = models.Book.objects.all().values_list('id','book_name')
>>> ret
调用values或者values_list的是objects控制器,那么返回所有数据
>>> ret = models.Book.objects.values()
>>> ret
distinct() 去重,配置values和values_list来使用
>>> models.Book.objects.all().values('book_name').distinct()
filter双下划线查询
**__in** price值等于这三个里面的任意一个的对象
Book.objects.filter(price__in=[100,200,300])
**__gt** 大于
>>> ret = models.Book.objects.filter(price__gt=1233)
>>> ret.values()
**__gte**大于等于
>>> ret = models.Book.objects.filter(price__gte=2)
>>> ret.count()
3
lt 等于
>>> ret = models.Book.objects.filter(price__lt=1234)
>>> ret.count()
2
lte 小于等于
>>> ret = models.Book.objects.filter(price__lte=1234)
>>> ret.count()
3
**__range** 大于等于35,小于等于38
>>>ret = models.Book.objects.filter(price__range=[35,38])
>>>ret.count()
3
**__contains** 包含这个字符串的数据
>>> ret = models.Book.objects.filter(book_name__contains='2')
>>> ret.values()
**__icontains** 不区分大小写
ret = models.Book.objects.filter(book_name__icontains='py')
**__startswith** 以什么开头 -- endswith(以什么结尾) -- istartswith(不区分大小写)
>>> ret = models.Book.objects.filter(book_name__startswith='2')
>>> ret.values()
**__year** 查询年 **__month** 月
ret = models.Book.objects.filter(publish_date__year='2018')
**__isnull** 字段值为空的数据
models.Book.objects.filter(publish_date__isnull=True)