Django文件閱讀之查詢
阿新 • • 發佈:2018-12-13
建立物件
為了在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()。
檢索物件
要從資料庫中檢索物件,請在模型類上構建一個 QuerySet
via a Manager
。
A QuerySet
表示資料庫中的物件集合。它可以有零個,一個或多個過濾器。過濾器根據給定的引數縮小查詢結果範圍。在SQL術語中,a QuerySet
等於SELECT
語句,過濾器是限制子句,如WHERE
或LIMIT
。
從表中檢索物件的最簡單方法是獲取所有這些物件。為此,請使用以下all()
方法
要建立此類子集,請優化初始
QuerySet
新增過濾條件。兩種最常見的改進方法QuerySet
是:
-
filter(**kwargs)
-
返回
QuerySet
包含與給定查詢引數匹配的新物件。 -
exclude(**kwargs)
-
返回
QuerySet
包含與給定查詢引數 不 匹配的新物件。
查詢引數(**kwargs
在上面的函式定義中)應採用下面的欄位查詢中描述的格式。
例如,要獲取QuerySet
2006年的部落格條目,請使用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 LIMIT
和OFFSET
子句。
例如,這將返回前5個物件():LIMIT 5
>>> Entry.objects.order_by('headline')[0]
這大致相當於:
>>> Entry.objects.order_by('headline')[0:1].get()
>>> Entry.objects.all()[:5]