您好,登錄后才能下訂單哦!
這篇文章主要介紹django連接數(shù)據(jù)庫查詢的方法,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
Django項目要操作數(shù)據(jù)庫,首先要和數(shù)據(jù)庫建立連接,才能讓程序中的數(shù)據(jù)和數(shù)據(jù)庫關(guān)聯(lián)起來進(jìn)行數(shù)據(jù)的增刪改查操作。通過pymysql模塊完成和數(shù)據(jù)庫之間的交互過程。
Django項目默認(rèn)使用mysqldb模塊進(jìn)行和mysql數(shù)據(jù)庫之間的交互操作,但是mysqldb模塊對于python3.4以上的版本支持還不夠完善,所以我們要使用替代方案。
數(shù)據(jù)查詢
要從數(shù)據(jù)庫檢索數(shù)據(jù),首先要獲取一個*查詢集***(QuerySet),查詢集表示從數(shù)據(jù)庫獲取的對象集合,它可以有零個,一個或多個過濾器。返回查詢集的方法,稱為過濾器,過濾器根據(jù)給定的參數(shù)縮小查詢結(jié)果范圍,相當(dāng)于sql語句中where或limit。
在管理器上調(diào)用過濾器方法會返回查詢集,
查詢集經(jīng)過過濾器篩選后返回新的查詢集,因此可以寫成鏈?zhǔn)竭^濾,
惰性執(zhí)行:創(chuàng)建查詢集不會帶來任何數(shù)據(jù)庫的訪問,直到調(diào)用數(shù)據(jù)時,才會訪問數(shù)據(jù)庫,
以下對查詢集求值:迭代、切片、序列化、與if合用、repr()/print()/len()/list()/bool()。
返回查詢集
all()
# 獲取所有數(shù)據(jù),對應(yīng)SQL:select * from User User.objects.all()
filter(**kwargs) 返回QuerySet包含與給定查找參數(shù)匹配的新查詢集。
#等價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) #鏈?zhǔn)秸{(diào)用,等價于User.objects.filter(uid__gt=1,type=2) User.objects.filter(uid__gt=1).filter(type=2)
exclude(**kwargs)
# 不匹配,對應(yīng)SQL:select * from User where name != 'admin' User.objects.exclude(name='admin')
order_by(*fields)
參數(shù)是字段名,可以有多個字段名,默認(rèn)是升序。
如果要按某個字段降序,在字段名前加’-’: "-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')
返回單個值
下面這些方法后面不能再跟其他過濾方法,因為他們不返回查詢集
get() 只匹配一條數(shù)據(jù)
u = User.objects.get(pk=1) #正常 u = User.objects.get(uid__gt=20) #MultipleObjectsReturned 匹配到了多條數(shù)據(jù) u = User.objects.get(uid__lt=-1) #DoesNotExist 匹配失敗
first()和last()
User.objects.all().first() #返回結(jié)果集中第一條數(shù)據(jù) User.objects.all().last() #返回結(jié)果集中最后一條數(shù)據(jù)
count()
返回結(jié)果集記錄數(shù)目,等價于select count(*)不會返回整個結(jié)果集,相比len方法更有效
User.objects.count()
exists()
判斷查詢集中是否有記錄,有返回True,否則返回False
User.objects.filter(uid=3).exists()
查詢集限制
查詢集類似列表,可以使用下標(biāo)進(jìn)行限制,類似sql語句中的limit子句。但索引不能是負(fù)數(shù)
索引
切片
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]
以上是django連接數(shù)據(jù)庫查詢的方法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。