Django Queryset 筆記
最近嘗試在用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
兩者分別是找開頭跟結尾