1. 程式人生 > >Django文件閱讀之查詢

Django文件閱讀之查詢

建立物件

為了在Python物件中表示資料庫表資料,Django使用直觀的系統:模型類表示資料庫表,該類的例項表示資料庫表中的特定記錄。

要建立物件,請使用模型類的關鍵字引數對其進行例項化,然後呼叫save()以將其儲存到資料庫中。

>>> from blog.models import Blog
>>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.') >>> b.save()
要在單個步驟中建立和儲存物件,請使用該 create()方法。
要儲存對已存在於資料庫中的物件的更改,請使用 
save()
更新ManyToManyField工作的方式略有不同 - 使用 add()欄位上的方法向關係新增記錄,而不是用save()。

檢索物件

要從資料庫中檢索物件,請在模型類上構建一個 QuerySetvia a Manager

QuerySet表示資料庫中的物件集合。它可以有零個,一個或多個過濾器過濾器根據給定的引數縮小查詢結果範圍。在SQL術語中,a QuerySet等於SELECT語句,過濾器是限制子句,如WHERELIMIT

從表中檢索物件的最簡單方法是獲取所有這些物件。為此,請使用以下all()方法

要建立此類子集,請優化初始 

QuerySet新增過濾條件。兩種最常見的改進方法QuerySet是:

filter(**kwargs)
返回 QuerySet 包含與給定查詢引數匹配物件。
exclude(**kwargs)
返回 QuerySet 包含與給定查詢引數 匹配物件

查詢引數(**kwargs在上面的函式定義中)應採用下面的欄位查詢描述的格式

例如,要獲取QuerySet2006年的部落格條目,請使用filter()如下:

Entry.objects.filter(pub_date__year=2006)

檢索單個物件get()

filter()QuerySet即使只有一個物件與查詢匹配,它總會給你一個 - 在這種情況下,它將QuerySet包含一個元素。

如果您知道只有一個物件與您的查詢匹配,則可以使用直接返回物件的 get()方法 Manager

>>> one_entry = Entry.objects.get(pk=1)
請注意,使用get()和使用 filter()切片之間存在差異 [0]如果沒有與查詢匹配的結果, get()則會引發DoesNotExist 異常。
 

使用Python的陣列切片語法的子集將您限制 QuerySet為一定數量的結果。這相當於SQL LIMITOFFSET子句。

 

例如,這將返回前5個物件():LIMIT 5

>>> Entry.objects.order_by('headline')[0] 

這大致相當於:

>>> Entry.objects.order_by('headline')[0:1].get()
 
 
  
  
>>> Entry.objects.all()[:5]