django查询表记录的十三种方法
django查詢表記錄的十三種方法
all() 結(jié)果為queryset類型
>>> models.Book.objects.all() <QuerySet [<Book: Book object>, <Book: Book object>, <Book: Book object>]>filter() 條件查詢(它下面也有很多種方法,見最下面)
>>> ret = models.Book.objects.filter(id=5) >>> ret <QuerySet [<Book: Book object>]>get() 得到的是一個model對象,有且只能有一個
會出現(xiàn)兩種報錯
- 1 查不到數(shù)據(jù)會報錯 :Book matching query does not exist.
- 2 返回值超過一個就報錯 :returned more than one Book -- it returned 13!
exclude() 排除
order_by() 排序
models.Book.objects.all().order_by('-price','id') #類似于mysql種的order by price desc,id asc;reverse() 反轉(zhuǎn)
models.Book.objects.all().order_by('id').reverse() # 數(shù)據(jù)排序之后才能反轉(zhuǎn)count() 計數(shù),統(tǒng)計返回結(jié)果的數(shù)量
>>> ret = models.Book.objects.all().count() >>> ret 3first() 返回第一條數(shù)據(jù),結(jié)果是model對象類型
>>> ret = models.Book.objects.all() >>> ret.first() <Book: Book object> >>> ret.first().id 5last() 返回最后一條數(shù)據(jù),結(jié)果是model對象類型
>>> ret = models.Book.objects.all() >>> ret.last() <Book: Book object> >>> ret.last().id 11exists() 判斷返回結(jié)果集是不是有數(shù)據(jù)
>>> ret = models.Book.objects.filter(id=999).exists() >>> ret False >>> ret = models.Book.objects.filter(id=11).exists() >>> ret Truevalues() (返回的queryset,里面是字典類型數(shù)據(jù))
>>> ret = models.Book.objects.all().values('id','book_name') >>> ret <QuerySet [{'id': 5, 'book_name': '1'}, {'id': 6, 'book_name': '2'}, {'id': 11, 'book_name': '23'}]>values_list(返回的queryset,里面是數(shù)組類型數(shù)據(jù))
>>> ret = models.Book.objects.all().values_list('id','book_name') >>> ret <QuerySet [(5, '1'), (6, '2'), (11, '23')]>調(diào)用values或者values_list的是objects控制器,那么返回所有數(shù)據(jù)
>>> ret = models.Book.objects.values() >>> ret <QuerySet [{'id': 5, 'book_name': '1', 'price': 2.0, 'shijian': '2018-03-22', 'press': 'admin'}, {'id': 6, 'book_name': '2', 'price': 1234.0, 'shijian': '2013-3-2', 'press': 'sdf'}, {'id': 11, 'book_name': '23', 'price': 11.0, 'shijian': '2019-09-10', 'press': '234'} ]>distinct() 去重,配置values和values_list來使用
>>> models.Book.objects.all().values('book_name').distinct() <QuerySet [{'book_name': '1'}, {'book_name': '2'}, {'book_name': '23'}]>filter雙下劃線查詢
**__in** price值等于這三個里面的任意一個的對象
Book.objects.filter(price__in=[100,200,300])**__gt** 大于
>>> ret = models.Book.objects.filter(price__gt=1233) >>> ret.values() <QuerySet [{'id': 6, 'book_name': '2', 'price': 1234.0, 'shijian': '2013-3-2', 'press': 'sdf'}]>**__gte**大于等于
>>> ret = models.Book.objects.filter(price__gte=2) >>> ret.count() 3lt 等于
>>> ret = models.Book.objects.filter(price__lt=1234) >>> ret.count() 2lte 小于等于
>>> 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** 包含這個字符串的數(shù)據(jù)
>>> ret = models.Book.objects.filter(book_name__contains='2') >>> ret.values() <QuerySet [{'id': 6, 'book_name': '2', 'price': 1234.0, 'shijian': '2013-3-2', 'press': 'sdf'}, {'id': 11, 'book_name': '23', 'price': 11.0, 'shijian': '2019-09-10', 'press': '234'}]>**__icontains** 不區(qū)分大小寫
ret = models.Book.objects.filter(book_name__icontains='py')**__startswith** 以什么開頭 -- endswith(以什么結(jié)尾) -- istartswith(不區(qū)分大小寫)
>>> ret = models.Book.objects.filter(book_name__startswith='2') >>> ret.values() <QuerySet [{'id': 6, 'book_name': '2', 'price': 1234.0, 'shijian': '2013-3-2', 'press': 'sdf'}, {'id': 11, 'book_name': '23', 'price': 11.0, 'shijian': '2019-09-10', 'press': '234'}]>**__year** 查詢年 **__month** 月
ret = models.Book.objects.filter(publish_date__year='2018')**__isnull** 字段值為空的數(shù)據(jù)
models.Book.objects.filter(publish_date__isnull=True)轉(zhuǎn)載于:https://www.cnblogs.com/alex3174/p/11608374.html
總結(jié)
以上是生活随笔為你收集整理的django查询表记录的十三种方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深度学习】Focal Loss 与 G
- 下一篇: 使用BeautifulSoup爬虫