django數據查詢

數據查詢
要從數據庫檢索數據捏卓,首先要獲取一個查詢集**(QuerySet)榜配,查詢集表示從數據庫獲取的對象集合否纬,它可以有零個,一個或多個過濾器蛋褥。返回查詢集的方法临燃,稱為過濾器,過濾器根據給定的參數縮小查詢結果范圍,相當于sql語句中where或limit膜廊。

在管理器上調用過濾器方法會返回查詢集
查詢集經過過濾器篩選后返回新的查詢集乏沸,因此可以寫成鏈式過濾
惰性執(zhí)行:創(chuàng)建查詢集不會帶來任何數據庫的訪問,直到調用數據時爪瓜,才會訪問數據庫
以下對查詢集求值:迭代蹬跃、切片、序列化铆铆、與if合用蝶缀、repr()/print()/len()/list()/bool()

管理器的方法 返回類型 說明
模型類.objects.aggregate(Avg('price'), Max('price'), Min('price')) 平均值,最大算灸, 最小
模型類.values_list('number', flat=True) values_list可以獲取number的元組列表扼劈,加個參數flat=True可以獲取number的值列表。

模型類.objects.all() QuerySet 返回表中所有數據
模型類.objects.filter() QuerySet 返回符合條件的數據
模型類.objects.exclude() QuerySet 返回不符合條件的數據
模型類.objects.order_by() QuerySet 對查詢結果集進行排序
模型類.objects.values() QuerySet 返回一個列表 每個元素為一個字典
模型類.objects.reverse() QuerySet 對排序的結果反轉
模型類.objects.get() 模型對象 返回一個滿足條件的對象菲驴;
如果沒有找到符合條件的對象荐吵,會引發(fā)模型類.DoesNotExist異常;
如果找到多個,會引發(fā)模型類.MultiObjectsReturned 異常
模型類.objects.count() int 返回查詢集中對象的數目
模型類.objects.first() 模型對象 返回第一條數據
模型類.objects.last() 模型對象 返回最后一條數據
模型類.objects.exists() bool 判斷查詢的數據是否存在
模型類.objects.update_or_create() 數據存在更新赊瞬, 否則創(chuàng)建新一條新
模型類.objects.filter(node_ip=ip,hddname=hddname).update(temp=1) 更新數據
Users.objects.filter(id = 1).update(temp=None) 更新temp字段為null
Users.objects.exclude(name="") exclude反向查先煎。這里是查詢字段不為空的。
5.2.1 返回查詢集
all()

更新 user='admin'并且uid=11的數據 如果沒有則創(chuàng)建一條 巧涧,更新的數據為defaults;

django 官網:https://docs.djangoproject.com/en/2.1/ref/models/querysets/

User.objects.update_or_create(
    defaults=user_dict,
    user='admin',
    uid=11)

獲取所有數據薯蝎,對應SQL:select * from User

User.objects.all()

filter(**kwargs) 返回QuerySet包含與給定查找參數匹配的新查詢集。

等價sql:select * from User

User.objects.filter()

等價sql:select * from User where uname = 'admin'

User.objects.filter(uname='admin')

等級sql:select * from User where uid > 1 and type = 2

User.objects.filter(uid__gt=1,type=2)

鏈式調用谤绳,等價于User.objects.filter(uid__gt=1,type=2)

User.objects.filter(uid__gt=1).filter(type=2)
exclude(**kwargs)

不匹配占锯,對應SQL:select * from User where name != 'admin'

User.objects.exclude(name='admin')
order_by(*fields)

參數是字段名,可以有多個字段名缩筛,默認是升序消略。
如果要按某個字段降序,在字段名前加’-’: "-uid"表示按uid降序排列

按uid升序排列 等價于 order by uid

User.objects().order_by('uid')

按uid降序排列 等價于 order by uid desc

User.objects.order_by('-uid')

多列排序 等價于 order by password,uid desc

User.objects.order_by('password','-uid')
values()

返回所有字段

User.objects.values()

返回數據:

[{'uid': 2, 'uname': '小甜甜', 'password': '59f2443a4317918ce29ad28a14e1bdb7'type': '普通用戶', 'regtime': None, 'ip': None, 'allowed': '允許登錄', 'email': None, None},...]

返回指定字段

User.objects.values('uname','password')
[{'uname': '小甜甜', 'password': '59f2443a4317918ce29ad28a14e1bdb7'},...]
reverse()

模型類.values_list('number', flat=True) values_list可以獲取number的元組列表瞎抛,加個參數flat=True可以獲取number的值列表艺演。

In [1]: from apps.dormitory.models import Building  
  
In [2]: buildings = Building.objects.values('number')  
  
In [3]: buildings  
Out[3]: [{'number': u'1'}, {'number': u'2'}, {'number': u'3'}, {'number': u'4'}, {'number': u'5'}]  
  
In [4]: buildings_ = Building.objects.values_list('number')  
  
In [5]: buildings_  
Out[5]: [(u'1',), (u'2',), (u'3',), (u'4',), (u'5',)]  
  
In [6]: buildings_list = Building.objects.values_list('number', flat=True)  
  
In [7]: buildings_list  
Out[7]: [u'1', u'2', u'3', u'4', u'5'] 
User.objects.order_by('id').reverse()  降序
User.objects.order_by('-id').reverse()  升序

distinct() 去重

User.objects.values('password').distinct()

?

5.2.2 返回單個值
下面這些方法后面不能再跟其他過濾方法,因為他們不返回查詢集

get() 只匹配一條數據

u = User.objects.get(pk=1)  #正常
u = User.objects.get(uid__gt=20) #MultipleObjectsReturned 匹配到了多條數據
u = User.objects.get(uid__lt=-1) #DoesNotExist 匹配失敗

first()和last()

User.objects.all().first()  #返回結果集中第一條數據
User.objects.all().last()   #返回結果集中最后一條數據

count()

返回結果集記錄數目桐臊,等價于select count(*)
不會返回整個結果集胎撤,相比len方法更有效

User.objects.count()

exists()

判斷查詢集中是否有記錄,有返回True断凶,否則返回False

User.objects.filter(uid=3).exists()

5.2.3查詢集限制
查詢集類似列表伤提,可以使用下標進行限制,類似sql語句中的limit子句懒浮。但索引不能是負數

索引
切片

User.objects.all()[0]  #等同于:limit 0,1
User.objects.all()[2]  #等同于:limit 2,1
User.objects.all()[0:2] #等同于limit 2
User.objects.all()[:2] #等同于limit 2
User.objects.all()[::2] 

統(tǒng)計:

# 導入Avg模塊
from django.db.models import Avg 
Book.objects.aggregate(average_price=Avg('price'))
{'average_price': 34.35}

原文:https://blog.csdn.net/chen1042246612/article/details/84071006

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末飘弧,一起剝皮案震驚了整個濱河市识藤,隨后出現的幾起案子砚著,更是在濱河造成了極大的恐慌次伶,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稽穆,死亡現場離奇詭異冠王,居然都是意外死亡,警方通過查閱死者的電腦和手機舌镶,發(fā)現死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門柱彻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人餐胀,你說我怎么就攤上這事哟楷。” “怎么了否灾?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵卖擅,是天一觀的道長。 經常有香客問我墨技,道長惩阶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任扣汪,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘剩愧。我一直安慰自己瞪慧,他們只是感情好,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布茅主。 她就那樣靜靜地躺著舞痰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪暗膜。 梳的紋絲不亂的頭發(fā)上匀奏,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音学搜,去河邊找鬼娃善。 笑死,一個胖子當著我的面吹牛瑞佩,可吹牛的內容都是我干的聚磺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼炬丸,長吁一口氣:“原來是場噩夢啊……” “哼瘫寝!你這毒婦竟也來了蜒蕾?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤焕阿,失蹤者是張志新(化名)和其女友劉穎咪啡,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體暮屡,經...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡撤摸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了褒纲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片准夷。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖莺掠,靈堂內的尸體忽然破棺而出衫嵌,到底是詐尸還是另有隱情,我是刑警寧澤彻秆,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布楔绞,位于F島的核電站,受9級特大地震影響掖棉,放射性物質發(fā)生泄漏墓律。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一幔亥、第九天 我趴在偏房一處隱蔽的房頂上張望耻讽。 院中可真熱鬧,春花似錦帕棉、人聲如沸针肥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慰枕。三九已至,卻和暖如春即纲,著一層夾襖步出監(jiān)牢的瞬間具帮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工低斋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蜂厅,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓膊畴,卻偏偏與公主長得像掘猿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子唇跨,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內容

  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查詢集API 參...
    陽光小鎮(zhèn)少爺閱讀 3,827評論 0 8
  • Django 1.8.2 文檔Home | Table of contents | Index | Modules...
    軒轅小愛閱讀 2,349評論 0 2
  • 數據庫基本操作(查詢) 一稠通、查詢對象 從數據庫里檢索對象衬衬,可以通過模型的Manage來建立QuerySet,一個Q...
    唯老閱讀 795評論 0 6
  • 模塊間聯系越多,其耦合性越強改橘,同時表明其獨立性越差( 降低耦合性滋尉,可以提高其獨立性)。軟件設計中通常用耦合度和內聚...
    riverstation閱讀 2,075評論 0 8
  • 寫大字的時候唧龄,我們大多數同學找來細木棒削好了兼砖,蘸了墨汁奸远,隨性地寫既棺。所謂墨汁,也是用手在自家的鍋底刮了一些鍋灰懒叛,用水...
    青葦暖陽閱讀 326評論 0 5