欧美成人片一区二区三区,久久碰人妻一区二区三区,久久婷婷激情综合色综合俺也去,狂野欧美性猛交免费视频,久久夜色精品国产亚洲

21
2023/06

Django框架使用ORM查詢結(jié)果如何包含附表中的字段內(nèi)容

發(fā)布時(shí)間:2023-06-21 17:26:43
發(fā)布者:已經(jīng)寫(xiě)了
瀏覽量:
0

在使用PythonDjango框架進(jìn)行web開(kāi)發(fā)的時(shí)候,會(huì)有很多數(shù)據(jù)庫(kù)方面的寫(xiě)入,查詢等操作,在操作數(shù)據(jù)庫(kù)的時(shí)候,我們可以通過(guò)編輯SQL語(yǔ)句進(jìn)行查詢數(shù)據(jù)庫(kù),也可以使用Django ORM(Object-Relational Mapping,對(duì)象關(guān)系映射)來(lái)進(jìn)行數(shù)據(jù)庫(kù)操作,Django ORM 是一個(gè)使用 Python 語(yǔ)言編寫(xiě)的庫(kù),可以使得開(kāi)發(fā)者通過(guò)面向?qū)ο蟮姆绞讲僮麝P(guān)系型數(shù)據(jù)庫(kù)。

使用Django ORM相對(duì)寫(xiě)sql語(yǔ)句執(zhí)行數(shù)據(jù)庫(kù)操作,最大的優(yōu)點(diǎn)就是不用寫(xiě)很長(zhǎng)的代碼,只需要調(diào)用對(duì)象就可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢等操作,但是相對(duì)于寫(xiě)SQL語(yǔ)句,對(duì)于剛開(kāi)始使用Django ORM的人來(lái)說(shuō),可能很多地方用的不是很明白使用起來(lái)就會(huì)生澀很多。

假設(shè)你有兩個(gè)表,一個(gè)是 orders 表,另一個(gè)是 order_details 表,order_details 表包含一個(gè) order_id 字段,與 orders 表中的 id 字段關(guān)聯(lián)。你可以使用 Django 的 ForeignKey 字段來(lái)定義這個(gè)關(guān)聯(lián)。如果你想在 Django 中查詢一個(gè)表,并且想顯示該表中關(guān)聯(lián)的附加表的內(nèi)容,可以使用 Django 的關(guān)聯(lián)表功能。

 正常的查詢語(yǔ)句是這樣的:

    orders.objects.get(id=1)

但是這樣的查詢結(jié)果,只有主表orders中的字段沒(méi)有附表中的字段,但是我們又需要附表中的信息應(yīng)該怎么辦呢,不熟悉的就只能用本方法,在通過(guò)id去查詢附表

    orders_details.objects.get(id=1)

這樣的查詢就會(huì)進(jìn)行兩次查詢,代碼量也增加了,并沒(méi)有達(dá)到預(yù)想中的效果,這個(gè)時(shí)候我們應(yīng)該如何查詢附表中的內(nèi)容呢?

其實(shí)我們可以直接用關(guān)聯(lián)的外鍵就可以將附表中的信息獲取過(guò)來(lái),可以通過(guò)values方法

    orders.objects.get(id=1).values('order_id__names')

獲取到得結(jié)果中就會(huì)有附表中的信息,但是字段的名稱成了order_id_names,不太美觀,有強(qiáng)迫癥的表示受不了

這個(gè)時(shí)候我們可以通過(guò)另外的方法,在獲取到附表字段的同時(shí),對(duì)字段名重命名

    orders.objects.annotate(details_name=F('receive_uid__name')).get(id=1)

這樣就可以在查詢列結(jié)果里查詢到附表的name,并且鍵名為details_name看起來(lái)更順眼了

下面是我們項(xiàng)目中的一些代碼段可以用來(lái)借鑒

image.png

關(guān)鍵詞:
返回列表