sql跨表查询_白话django之ORM的查询语句
生活随笔
收集整理的這篇文章主要介紹了
sql跨表查询_白话django之ORM的查询语句
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
教程源碼:z991/django_turital
在日常開發(fā)中,數(shù)據(jù)庫(kù)的增刪改查(CDUR)中,查詢需求偏多,所以查詢的語法比增刪改操作多得多,尤其是跨表關(guān)聯(lián)查詢,可以讓代碼精簡(jiǎn)很多年。
直接上代碼吧,我是直接在上次寫的的視圖函數(shù)中改寫的。
def orm_test(request):"""增加操作"""# 新增一個(gè)名字為1901的一個(gè)班級(jí),create是新增方法,里面可以接受多個(gè)字段參數(shù)# Class.objects.create(name="1901")# 同時(shí)新增一個(gè)學(xué)生和班級(jí)操作# 新增一個(gè)班級(jí)名稱為1903的班級(jí),返回一個(gè)班級(jí)實(shí)例# cls_instance = Class.objects.get(name="1903")# stu_info左邊的key要和Student模型字段對(duì)應(yīng)上,因?yàn)閏ls是外鍵,所以要對(duì)應(yīng)一個(gè)班級(jí)的實(shí)例# stu_info = {# "name":"XIAOmei",# "age": "24",# "score":"88",# "email": "1333@qq.com",# "introduce": "假如你是xiaomei",# "cls": cls_instance# }# Student.objects.create(**stu_info)"""修改操作"""# 將名字為1901的班級(jí)名稱改為1901_xiu,filter為過濾,支持多個(gè)參數(shù),update是更新方法,支持多個(gè)參數(shù)# Class.objects.filter(name="1901").update(name="1901_xiu")"""刪除操作"""# 將名字為1901_xiu的班級(jí)刪除掉,delete是刪除方法# Class.objects.filter(name="1901_xiu").delete()"""查詢操作"""# 查詢單條,get返回實(shí)例,如果查詢結(jié)果沒有回報(bào)錯(cuò),# filter查詢返回的結(jié)果是多個(gè)實(shí)例的列表,# instance = Student.objects.get(pk=1)#instance = Student.objects.filter(pk=1).first()# 查詢多條,返回queryset類型(多個(gè)查詢結(jié)果實(shí)例的列表) 可以被迭代# queryset = Student.objects.all() ## for stu in queryset:#學(xué)生的姓名 學(xué)生的年齡 學(xué)生的分?jǐn)?shù)# print(stu.name,stu.age,stu.score)#對(duì)查詢集結(jié)果進(jìn)行切片,取第0個(gè)到第4個(gè),和列表的切片一樣# queryset = Student.objects.filter().all()[:5] # limit 語句# print(queryset.query) # 返回執(zhí)行的sql語句# 精準(zhǔn)查找 兩條語句作用一樣,查詢姓名位小美的學(xué)生,結(jié)果返回查詢集# queryset = Student.objects.filter(name='小美')# queryset = Student.objects.filter(name__exact='小美')# 忽略大小寫# queryset = Student.objects.filter(name__iexact='xiaomei')# 模糊查詢# queryset = Student.objects.filter(name__contains='xiao') # 不忽略大小寫# queryset = Student.objects.filter(name__icontains='xiao') # 忽略大小寫# 正則匹配法# queryset = Student.objects.filter(name__regex='^x')# queryset = Student.objects.filter(name__iregex='^x')# 大于 小于# queryset = Student.objects.filter(age__gt=17, age__lt=19)# in 一個(gè)集合中的所有# queryset = Student.objects.filter(age__in=(18,17,16))# queryset = Student.objects.all().order_by('age') 升序# queryset = Student.objects.all().order_by('-age') #升序# queryset = Student.objects.all().order_by('-age','id') #升序# for stu in queryset:# print stu.age,stu.id# 指定字段查詢# 第一種# queryset = Student.objects.values('name','age').all()# 第二種# queryset = Student.objects.values_list('name','age','score').all()# 連表查詢# 第一種# queryset = Student.objects.all()# for stu in queryset:# print stu.name,stu.cls.id,stu.cls.name# 第二種 : 牛逼的雙下劃線(跨表),可以用多個(gè)雙下劃線跨多張表# 語句功能是查詢學(xué)生表中所有學(xué)生的姓名和學(xué)生所在班級(jí)的名稱# cls__name 是cls雙下劃線name,cls 是Student中的cls字段,name是班級(jí)表中的name字段# queryset = Student.objects.values('name','cls__name').all()# 查詢一個(gè)班級(jí)所有學(xué)生,執(zhí)行兩次sql語句# cls1 = Class.objects.get(name='1701')# queryset = Student.objects.filter(cls=cls1)# 查詢一個(gè)班級(jí)所有學(xué)生,執(zhí)行一次sql語句# queryset = models.Student.objects.filter(cls__name='1903').all().values('name','cls__name')# 查詢一個(gè)班級(jí)所有學(xué)生,起始表從班級(jí)表開始查詢,反向查詢# stu_cls 是學(xué)生表中外鍵的別名# queryset = Class.objects.get(name='1903').stu_cls.all()# 按照分?jǐn)?shù)查詢 大于90分# queryset = Student.objects.filter(score__gt=90).all()return HttpResponse('數(shù)據(jù)庫(kù)操作成功') 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的sql跨表查询_白话django之ORM的查询语句的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两文本一图片android,Androi
- 下一篇: mysql ssd优化_mysql ss