在使用Python的Django框架進(jìn)行web開發(fā)的時候,會有很多數(shù)據(jù)庫方面的寫入,查詢等操作,在操作數(shù)據(jù)庫的時候,我們可以通過編輯SQL語句進(jìn)行查詢數(shù)據(jù)庫,也可以使用Django ORM(Object-Relational Mapping,對象關(guān)系映射)來進(jìn)行數(shù)據(jù)庫操作,Django ORM 是一個使用 Python 語言編寫的庫,可以使得開發(fā)者通過面向?qū)ο蟮姆绞讲僮麝P(guān)系型數(shù)據(jù)庫。
使用Django ORM相對寫sql語句執(zhí)行數(shù)據(jù)庫操作,最大的優(yōu)點(diǎn)就是不用寫很長的代碼,只需要調(diào)用對象就可以對數(shù)據(jù)庫進(jìn)行查詢等操作,但是相對于寫SQL語句,對于剛開始使用Django ORM的人來說,可能很多地方用的不是很明白使用起來就會生澀很多。
假設(shè)你有兩個表,一個是 orders 表,另一個是 order_details 表,order_details 表包含一個 order_id 字段,與 orders 表中的 id 字段關(guān)聯(lián)。你可以使用 Django 的 ForeignKey 字段來定義這個關(guān)聯(lián)。如果你想在 Django 中查詢一個表,并且想顯示該表中關(guān)聯(lián)的附加表的內(nèi)容,可以使用 Django 的關(guān)聯(lián)表功能。
正常的查詢語句是這樣的:
orders.objects.get(id=1)
但是這樣的查詢結(jié)果,只有主表orders中的字段沒有附表中的字段,但是我們又需要附表中的信息應(yīng)該怎么辦呢,不熟悉的就只能用本方法,在通過id去查詢附表
orders_details.objects.get(id=1)
這樣的查詢就會進(jìn)行兩次查詢,代碼量也增加了,并沒有達(dá)到預(yù)想中的效果,這個時候我們應(yīng)該如何查詢附表中的內(nèi)容呢?
其實(shí)我們可以直接用關(guān)聯(lián)的外鍵就可以將附表中的信息獲取過來,可以通過values方法
orders.objects.get(id=1).values('order_id__names')
獲取到得結(jié)果中就會有附表中的信息,但是字段的名稱成了order_id_names,不太美觀,有強(qiáng)迫癥的表示受不了
這個時候我們可以通過另外的方法,在獲取到附表字段的同時,對字段名重命名
orders.objects.annotate(details_name=F('receive_uid__name')).get(id=1)
這樣就可以在查詢列結(jié)果里查詢到附表的name,并且鍵名為details_name看起來更順眼了
下面是我們項目中的一些代碼段可以用來借鑒