django中ORM的查詢語句是什么,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
創(chuàng)新互聯(lián)公司為企業(yè)級客戶提高一站式互聯(lián)網(wǎng)+設(shè)計(jì)服務(wù),主要包括成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、重慶APP開發(fā)公司、小程序設(shè)計(jì)、宣傳片制作、LOGO設(shè)計(jì)等,幫助客戶快速提升營銷能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門都有經(jīng)驗(yàn)豐富的經(jīng)驗(yàn),可以確保每一個(gè)作品的質(zhì)量和創(chuàng)作周期,同時(shí)每年都有很多新員工加入,為我們帶來大量新的創(chuàng)意。
在日常開發(fā)中,數(shù)據(jù)庫的增刪改查(CDUR)中,查詢需求偏多,所以查詢的語法比增刪改操作多得多,尤其是跨表關(guān)聯(lián)查詢,可以讓代碼精簡很多。
直接上代碼吧,我是直接在上次寫的的視圖函數(shù)中改寫的。
def orm_test(request):
"""
增加操作
"""
# 新增一個(gè)名字為1901的一個(gè)班級,create是新增方法,里面可以接受多個(gè)字段參數(shù)
# Class.objects.create(name="1901")
# 同時(shí)新增一個(gè)學(xué)生和班級操作
# 新增一個(gè)班級名稱為1903的班級,返回一個(gè)班級實(shí)例
# cls_instance = Class.objects.get(name="1903")
# stu_info左邊的key要和Student模型字段對應(yīng)上,因?yàn)閏ls是外鍵,所以要對應(yīng)一個(gè)班級的實(shí)例
# stu_info = {
# "name":"XIAOmei",
# "age": "24",
# "score":"88",
# "email": "1333@qq.com",
# "introduce": "假如你是xiaomei",
# "cls": cls_instance
# }
# Student.objects.create(**stu_info)
"""
修改操作
"""
# 將名字為1901的班級名稱改為1901_xiu,filter為過濾,支持多個(gè)參數(shù),update是更新方法,支持多個(gè)參數(shù)
# Class.objects.filter(name="1901").update(name="1901_xiu")
"""
刪除操作
"""
# 將名字為1901_xiu的班級刪除掉,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)
#對查詢集結(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é)生所在班級的名稱
# cls__name 是cls雙下劃線name,cls 是Student中的cls字段,name是班級表中的name字段
# queryset = Student.objects.values('name','cls__name').all()
# 查詢一個(gè)班級所有學(xué)生,執(zhí)行兩次sql語句
# cls1 = Class.objects.get(name='1701')
# queryset = Student.objects.filter(cls=cls1)
# 查詢一個(gè)班級所有學(xué)生,執(zhí)行一次sql語句
# queryset = models.Student.objects.filter(cls__name='1903').all().values('name','cls__name')
# 查詢一個(gè)班級所有學(xué)生,起始表從班級表開始查詢,反向查詢
# 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ù)庫操作成功')
看完上述內(nèi)容,你們掌握django中ORM的查詢語句是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!