django查詢表記錄的十三種方法


django查詢表記錄的十三種方法

all() 結果為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對象,有且只能有一個
會出現兩種報錯

  • 1 查不到數據會報錯 :Book matching query does not exist.
  • 2 返回值超過一個就報錯 :returned more than one Book -- it returned 13!
>>> ret = models.Book.objects.get(id=5)
>>> ret
<Book: Book object>

exclude() 排除

  1. object能夠調用,models.Book.objects.exclude(book_name__startswith='活')
  2. queryset類型數據能夠調用。
>>> ret = models.Book.objects.all()
>>> ret.exclude(id=5)
<QuerySet [<Book: Book object>, <Book: Book object>]>

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()
<Book: Book object>
>>> ret.first().id
5

last() 返回最后一條數據,結果是model對象類型

>>> ret = models.Book.objects.all()
>>> ret.last()
<Book: Book object>
>>> 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
<QuerySet [{'id': 5, 'book_name': '1'}, {'id': 6, 'book_name': '2'}, {'id': 11, 'book_name': '23'}]>

values_list(返回的queryset,里面是數組類型數據)

>>> ret = models.Book.objects.all().values_list('id','book_name')
>>> ret
<QuerySet [(5, '1'), (6, '2'), (11, '23')]>

調用values或者values_list的是objects控制器,那么返回所有數據


>>> 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()
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()
<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 不區分大小寫

ret = models.Book.objects.filter(book_name__icontains='py')

__startswith 以什么開頭 -- endswith(以什么結尾) -- istartswith(不區分大小寫)

>>> 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 字段值為空的數據

models.Book.objects.filter(publish_date__isnull=True)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM