Django Queryset 筆記

Shao-Huan,Lin
Jun 23, 2023

--

最近嘗試在用Django開發一些流程,以下是一些比較常用的蒐索字句:

查詢

一般常見的是若現在有一個models叫做App

App(models.Model):
name= models.charfield(max_length=250)
pub_date = models.DateField()

總集合

  • all
    拉出所有資訊可以用

app_all=App.objects.all()

查詢

get
要找到Joe這個人可以用

app_may=App.objects.get(name=’Joe’)

篩選

filter
下面可以找到所有年分2006的

app_may=App.objects.filter(pub_dat__year=2006)

排除

exclude
下面可以排除所有相關的

app_exclude=App.objects.exclude()

索取&&處理

若有多個索取訪查,直到要拿資料前他是不會去訪查資料庫的,下列的資訊就只有訪查一次而已。不會造成資料庫訪查資源負擔。

>>> q = Entry.objects.filter(headline__startswith=”What”)
>>> q = q.filter(pub_date__lte=datetime.date.today())
>>> q = q.exclude(body_text__icontains=”food”)
>>> print(q)

Filter關鍵詞

filter v.s. get

filter一次會拿回一組查詢集。但get只拿一個,並直接回傳。如果你設的範疇不夠嚴謹導致多組資料回傳,Django會跳出 MultipleObjectsReturned警示。

>>> one_entry = Entry.objects.get(pk=1)

### exact

明確找尋

剛好跟query裡面長得一樣。

>>> Entry.objects.get(headline__exact=”Cat bites dog”)

若使用iexact就不會去顧慮大小寫的差異了。

contains

會找尋裡面含有相關內容的資料

Entry.objects.get(headline__contains=”Lennon”)

若資料為’today lennon honored’就要使用icontains來找尋了。

startswith, endswith

兩者分別是找開頭跟結尾

--

--