django之第十章:聚合矫渔、分組、F摧莽、Q以及事務

一庙洼、前后端分離和混合開發(fā)

1、模板語言:每個語言的web框架都會有模板語言镊辕,例django template language ==> dtl
2油够、模板語言的渲染是在后端完成的
3、用php寫前端是不對的征懈,前端只能是html石咬、css、js
4卖哎、前后端分離:前后端交互鬼悠,統(tǒng)一全用json格式
5、前端只專注于寫前端(vue亏娜、react:前端工程化)焕窝,后端只專注于寫后端(提供接口,交互json格式數據)

二维贺、聚合查詢

#聚合函數:最大它掂、最小、和幸缕、平均群发、總個數
from django.db.models import Max,Min,Sum,Avg,Count
#aggregate(*args, **kwargs),aggregate結束,已經不是queryset對象
#計算最大價格圖書
book = models.Book.objects.all().aggregate(max=Max("price"))

三发乔、分組查詢

annotate()為調用的QuerySet中每一個對象都生成一個獨立的統(tǒng)計值(統(tǒng)計方法用聚合函數)熟妓。

#統(tǒng)計價格數大于10元,作者個數大于1的圖書
res = models.Book.objects.values("pk").filter(price__gt=10).annotate(count=Count("authors__id")).filter(count__gt=1).values("name","count")
...
第一個values:分組
第一個filter:相當于where
第二個filter:相當于having
第二個values:查詢栏尚,取值

四起愈、F和Q查詢

F查詢:取出數據庫的某個字段的值

from django.db.models import F
# 把read_num都加1
res = models.Book.objects.all().update(read_num=F("read_num") + 1)
#查詢評論數大于閱讀數的書籍
res = models.Book.objects.all().filter(commit_num__gt=F("read_num"))
for i in res:
    print(i.name)

Q查詢:制造與或非的條件

from django.db.models import Q
 # 查詢名字叫egon或者價格大于100的書
res = models.Book.objects.filter(Q(name="egon") | Q(price__gt=100))
# 查詢名字叫egon并且價格大于100的書
方式一:res = models.Book.objects.filter(Q(name="egon") & Q(price__gt=100))
方式二:res = models.Book.objects.filter(name="egon",price__dt=100)
# 查詢名字不為egon的書
res = models.Book.objects.filter(~Q(name="egon"))

Q可以嵌套

#查詢名字叫egon并且價格大于100的或者是id小于3的書、
res = models.Book.onbjects.filter((Q(name="egon") & Q(price__gt=100)) | Q(id__lt=3))

五译仗、原生sql

#第一種方案
from django.db import connection
cursor = connection.cursor()
cursor.execute("select * from app01_book where id = %s",[1])
res = cursor.fetchall()
print(res)

#第二種方案
books = models.Book.objects.raw("select * from app01_book where id > 3")
print(books)  # RawQuerySet對象
for book in books:
    print(book.name)

六抬虽、defer和only

defer 和 only(跟查詢優(yōu)化相關)
only:保持是book對象,sql語句中只能搜索到only指定的字段纵菌,若要點其他字段阐污,sql會再搜索一遍該字段,影響查詢速度
defer:除了該字段sql都會搜索出咱圆。

books = models .Book.objects.all().only("name")
print(books[0].name)
print(books[0].price)  # 能出來笛辟,會影響sql查詢優(yōu)化
books = models.Book.objects.all().defer("name","price")
print(books[0].__dict__)  # 除了name和price字段

七功氨、事務(請求、裝飾器手幢、局部)

django orm中使用事物:原子性操作捷凄,要么都成功,要么都失敗
事物的三個粒度
1围来、局部使用

from django.db import transaction
with transaction.atomic():   # 規(guī)定都在事務中       
    author_detail = modes.AuthorDetail.objects.create(addr="xxx",phone="123",sex=1)
    raise Exception("拋了異常")  #主動拋出異常跺涤,兩條數據都錄不進去,若取消異常监透,就都成功
    author = models.Author.objects.create(name="lqz",age=19,author_detail=author_detail)

2桶错、視圖函數裝飾器,這一個視圖函數都在一個事物中
@transaction.atomic
def index(request):
return HttpResponse("OK")
3才漆、整個http請求牛曹,在事務中佛点。需要在settings.py中配置

'''
    DATABASES = {
        'default': {
            ...
            'PORT': 3306,
            'ATOMIC_REQUEST': True,
       
        }
    }

    'ATOMIC_REQUEST': True,
設置為True統(tǒng)一個http請求對應的所有sql都放在一個事務中執(zhí)行(要么所有都成功醇滥,要么所有都失敗)超营。
    '''

八鸳玩、事務的ACID是什么以及事務的隔離級別是什么

https://www.cnblogs.com/gjack/p/8901291.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市演闭,隨后出現的幾起案子不跟,更是在濱河造成了極大的恐慌,老刑警劉巖米碰,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窝革,死亡現場離奇詭異,居然都是意外死亡吕座,警方通過查閱死者的電腦和手機虐译,發(fā)現死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吴趴,“玉大人漆诽,你說我怎么就攤上這事÷嘀Γ” “怎么了厢拭?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長撇叁。 經常有香客問我供鸠,道長,這世上最難降的妖魔是什么陨闹? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任楞捂,我火速辦了婚禮家制,結果婚禮上,老公的妹妹穿的比我還像新娘泡一。我一直安慰自己颤殴,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布鼻忠。 她就那樣靜靜地躺著涵但,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帖蔓。 梳的紋絲不亂的頭發(fā)上矮瘟,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音塑娇,去河邊找鬼澈侠。 笑死,一個胖子當著我的面吹牛埋酬,可吹牛的內容都是我干的哨啃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼写妥,長吁一口氣:“原來是場噩夢啊……” “哼拳球!你這毒婦竟也來了?” 一聲冷哼從身側響起珍特,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤祝峻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扎筒,有當地人在樹林里發(fā)現了一具尸體莱找,經...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年嗜桌,在試婚紗的時候發(fā)現自己被綠了奥溺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡症脂,死狀恐怖谚赎,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情诱篷,我是刑警寧澤壶唤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站棕所,受9級特大地震影響鸠补,放射性物質發(fā)生泄漏龙誊。R本人自食惡果不足惜帆阳,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望躲撰。 院中可真熱鬧,春花似錦击费、人聲如沸拢蛋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谆棱。三九已至,卻和暖如春圆仔,著一層夾襖步出監(jiān)牢的瞬間垃瞧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工坪郭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留个从,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓歪沃,卻偏偏與公主長得像嗦锐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绸罗,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容

  • 基礎介紹 1. 簡介 Django意推,發(fā)音為[d???ɡ??],是用python語言寫的開源web開發(fā)框架珊蟀,并遵循M...
    DayBreakL閱讀 1,176評論 0 3
  • 為什么學習Python? 通過什么途徑學習的Python外驱? 上網收集視頻育灸,資料 關注公證號 買教程,書籍 Pyth...
    130920閱讀 1,215評論 0 0
  • Django知識點概述 Web應用 問題1:描述一個Web應用的工作流程昵宇。 問題2:描述項目的物理架構磅崭。(上圖中補...
    領帶襯有黃金閱讀 698評論 0 1
  • 第一部分 Python基礎篇(80題) 1、為什么學習Python瓦哎? Python相對于其他編程語言有很多優(yōu)點: ...
    清清子衿木子水心閱讀 1,708評論 0 1
  • 注:適用于 2.x 版本 1.pip 命令安裝方法 pip install Django #指定版本 Django...
    華爾街的主導曲閱讀 880評論 0 0