最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django中Q查詢及Q()對(duì)象 F查詢及F()對(duì)象用法

 更新時(shí)間:2020年07月09日 15:22:06   作者:Coxhuang  
這篇文章主要介紹了Django中Q查詢及Q()對(duì)象 F查詢及F()對(duì)象用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

Django Q/F

#1 環(huán)境

Python3.7.3

Django==2.0.6

#2 開始

#2.1 django F()表達(dá)式

每次獲取times當(dāng)前的值,再+1,這樣需要將times值取出,存到內(nèi)存中

obj = models.Test.objects.get(name="cox")
obj.times = obj.times + 1
obj.save()

雖然 obj.times = F(“times”) + 1

看起來像常規(guī)的Python為實(shí)例屬性賦值,但實(shí)際上它是一個(gè)描述數(shù)據(jù)庫上操作的SQL結(jié)構(gòu)

當(dāng)Django遇到要給F()實(shí)例,它會(huì)覆蓋標(biāo)準(zhǔn)的Python運(yùn)算符來創(chuàng)建一個(gè)封裝的SQL表達(dá)式;在這個(gè)例子中,指示數(shù)據(jù)庫增加由 obj.times 表示的數(shù)據(jù)庫字段。

無論 obj.times 的值是或曾是什么,Python永遠(yuǎn)不需要知道–完全由數(shù)據(jù)庫來處理。Python通過Django的F()類做的所有事情僅是參考某個(gè)字段創(chuàng)建SQL語法來描述操作。

obj = models.Test.objects.get(name="cox")
obj.times = F("times") + 1
obj.save()

因此,F(xiàn)()可以通過以下方式提供性能優(yōu)勢(shì)

直接在數(shù)據(jù)庫中操作而不是python

減少一些操作所需的數(shù)據(jù)庫查詢次數(shù)

#2.2 F()操作在 obj.save() 后會(huì)持續(xù)存在

如果times的值是1,那么經(jīng)過n次save()之后,times的值是2

obj = models.Test.objects.get(name="cox")
obj.times = obj.times + 1
obj.save()
obj.save()
obj.save()

如果times的值是1,那么經(jīng)過n次save()之后,times的值是1+n,而不是2,就是因?yàn)镕()操作在 obj.save() 后會(huì)持續(xù)存在

obj = models.Test.objects.get(name="cox")
obj.times = F("times") + 1
obj.save()
obj.save()
obj.save()

#2.3 F()再過濾(filter)中的使用

獲取表中收入(input_price)大于支出(output_price)的數(shù)據(jù)

models.Test.objects.filter(input_price__gt=F("output_price"))

Django支持F()對(duì)象使用加、減、乘、除、取模和冪運(yùn)算等算術(shù)操作,兩個(gè)操作數(shù)可以是常數(shù)或F()對(duì)象

models.Test.objects.filter(input_price__gt=F("output_price")*2)

models.Test.objects.filter(input_price__gt=F("output_price")+F("output_price"))

你還可以在F()對(duì)象中使用雙下劃線標(biāo)記來跨越關(guān)聯(lián)關(guān)系。 帶有雙下劃線的F()對(duì)象將引入任何需要的join 操作以訪問關(guān)聯(lián)的對(duì)象

models.Test.objects.filter(authors__name=F('blog__name'))

對(duì)于date 和date/time 字段,你可以給它們加上或減去一個(gè)timedelta對(duì)象

from datetime import timedelta

models.Test.objects.filter(mod_date__gt=F('pub_date') + timedelta(days=3))

#2.4 Django Q()表達(dá)式

當(dāng)我們?cè)诓樵兊臈l件中需要組合條件時(shí)(例如兩個(gè)條件“且”或者“或”)時(shí)。我們可以使用Q()查詢對(duì)象

from django.db.models import Q
models.Author.objects.filter(Q(name="cox") | Q(name="Tom")) # 獲取在Author表中,name等于cox和name等于cox的所有數(shù)據(jù)

models.Author.objects.filter(Q(name="cox") & Q(age=12))# 獲取在Author表中,name等于cox并且age等于12的所有數(shù)據(jù)

#2.5 Q()傳入條件查詢

q1 = Q()
q1.connector = 'OR'
q1.children.append(('name', "cox"))
q1.children.append(('name', "Tom"))
q1.children.append(('name', "Jeck"))
  
models.Author.objects.filter(q1) # 在Author表中,name等于cox/Tom/Jeck的所有數(shù)據(jù)
con = Q()

q1 = Q()
q1.connector = 'OR'
q1.children.append(('name', "cox"))
q1.children.append(('name', "Tom"))
q1.children.append(('name', "Jeck"))

q2 = Q()
q2.connector = 'OR'
q2.children.append(('age', 12))

con.add(q1, 'AND')
con.add(q2, 'AND')

models.Author.objects.filter(con) # 在Author表中,name等于cox/Tom/Jeck的 并且 滿足age等于12 的所有數(shù)據(jù)

#2.6 Q()非

在Q()語句中,~代表非

models.Author.objects.filter(~Q(name="cox")) # 獲取在Author表中,name不等于cox的所有數(shù)據(jù)

補(bǔ)充知識(shí):Django 中 Models 的 F()和 Q()函數(shù)

1、F() ---- 專門取對(duì)象中某列值的操作

F對(duì)象允許Django在未實(shí)際鏈接數(shù)據(jù)的情況下具有對(duì)數(shù)據(jù)庫字段的值的引用。

通常情況下我們?cè)诟聰?shù)據(jù)時(shí)需要先從數(shù)據(jù)庫里將原數(shù)據(jù)取出后方在內(nèi)存里,然后編輯某些屬性,最后提交。

all = BookInfo.objects.filter(auth="小明")
for b in all:
  price = b.price
  b.price = price + 10
  b.save
  
# 使用F對(duì)象來計(jì)算
BookInfo.objects.filter(auth="小明").update(price=F("price")+10)

2、Q() ---- 對(duì)對(duì)象的復(fù)雜查詢

Q對(duì)象是Django對(duì)model查詢中所使用的關(guān)鍵字參數(shù)進(jìn)行封裝后的一個(gè)對(duì)象。

Q對(duì)象可以通過 &(與)、 |(或)、 ~(非)運(yùn)算來組合生成不同的Q對(duì)象,便于在查詢操作中靈活地運(yùn)用。

from django.db.models import Q
# 并且條件:與條件查詢
models.User.objects.filter(條件1,條件2,條件n..)
models.User.objects.filter(Q(username='老王') & Q(userpass='admin'))

# 或者條件:或條件
models.User.objects.fliter(Q(username='老王') | Q(username='老李'))

# 取反條件
models.User.objects.filter(~Q(username='老王'))
models.User.objects.exclude(username='老王')

以上這篇Django中Q查詢及Q()對(duì)象 F查詢及F()對(duì)象用法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python將文本分每兩行一組并保存到文件

    python將文本分每兩行一組并保存到文件

    這篇文章主要介紹了python將文本分每兩行一組并保存到文件,需要的朋友可以參考下
    2018-03-03
  • 深入理解Python中命名空間的查找規(guī)則LEGB

    深入理解Python中命名空間的查找規(guī)則LEGB

    這篇文章主要介紹了深入理解Python中命名空間的查找規(guī)則LEGB,作者根據(jù)Python3.x版本進(jìn)行講解,需要的朋友可以參考下
    2015-08-08
  • Python3讀取和處理超大文件的操作詳解

    Python3讀取和處理超大文件的操作詳解

    在日常工作中,文件對(duì)象是我們常接觸到的可迭代類型之一,一般用?for?循環(huán)遍歷一個(gè)文件對(duì)象,可以逐行讀取它的內(nèi)容,但這種方式在碰到大文件時(shí),可能會(huì)出現(xiàn)一些奇怪的效率問題,所以本文給大家介紹了Python3讀取和處理超大文件的操作,需要的朋友可以參考下
    2024-04-04
  • Python中處理JSON文件的超詳細(xì)指南

    Python中處理JSON文件的超詳細(xì)指南

    這篇文章主要給大家介紹了關(guān)于Python中處理JSON文件的超詳細(xì)指南,json模塊是python內(nèi)置的庫,不需要額外安裝就可以導(dǎo)入運(yùn)行,json模塊的主要功能是將序列化數(shù)據(jù)從文件里讀取出來或者存入文件,需要的朋友可以參考下
    2024-05-05
  • Python使用Kafka處理數(shù)據(jù)的方法詳解

    Python使用Kafka處理數(shù)據(jù)的方法詳解

    Kafka是一個(gè)分布式的流數(shù)據(jù)平臺(tái),它可以快速地處理大量的實(shí)時(shí)數(shù)據(jù)。在Python中使用Kafka可以幫助我們更好地處理大量的數(shù)據(jù),本文就來和大家詳細(xì)講講具體使用方法吧
    2023-04-04
  • Pytorch中TensorBoard及torchsummary的使用詳解

    Pytorch中TensorBoard及torchsummary的使用詳解

    這篇文章主要介紹了Pytorch中TensorBoard及torchsummary的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • python人人網(wǎng)登錄應(yīng)用實(shí)例

    python人人網(wǎng)登錄應(yīng)用實(shí)例

    這篇文章主要介紹了python人人網(wǎng)登錄應(yīng)用實(shí)例,是一個(gè)非常實(shí)用的技巧,需要的朋友可以參考下
    2014-09-09
  • Python的集合類型之set和frozenset詳解

    Python的集合類型之set和frozenset詳解

    這篇文章主要為大家詳細(xì)介紹了Python的集合類型之set和frozenset,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 使用Python通過oBIX協(xié)議訪問Niagara數(shù)據(jù)的示例

    使用Python通過oBIX協(xié)議訪問Niagara數(shù)據(jù)的示例

    這篇文章主要介紹了使用Python通過oBIX協(xié)議訪問Niagara數(shù)據(jù)的示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-12-12
  • 詳解Tensorflow不同版本要求與CUDA及CUDNN版本對(duì)應(yīng)關(guān)系

    詳解Tensorflow不同版本要求與CUDA及CUDNN版本對(duì)應(yīng)關(guān)系

    這篇文章主要介紹了詳解Tensorflow不同版本要求與CUDA及CUDNN版本對(duì)應(yīng)關(guān)系,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評(píng)論

凌云县| 苏尼特右旗| 当涂县| 郴州市| 临邑县| 高雄市| 会理县| 房产| 天水市| 全州县| 凉城县| 夏邑县| 错那县| 阜南县| 册亨县| 乡宁县| 肥东县| 峨眉山市| 隆尧县| 来安县| 会昌县| 壤塘县| 葵青区| 江都市| 开平市| 临高县| 峨眉山市| 华池县| 乌什县| 洛南县| 务川| 凌源市| 南京市| 山西省| 台东县| 繁峙县| 许昌县| 临颍县| 常山县| 军事| 荣昌县|