您好,登錄后才能下訂單哦!
django中ORM的查詢語句是什么,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
在日常開發中,數據庫的增刪改查(CDUR)中,查詢需求偏多,所以查詢的語法比增刪改操作多得多,尤其是跨表關聯查詢,可以讓代碼精簡很多。
直接上代碼吧,我是直接在上次寫的的視圖函數中改寫的。
def orm_test(request):
"""
增加操作
"""
# 新增一個名字為1901的一個班級,create是新增方法,里面可以接受多個字段參數
# Class.objects.create(name="1901")
# 同時新增一個學生和班級操作
# 新增一個班級名稱為1903的班級,返回一個班級實例
# cls_instance = Class.objects.get(name="1903")
# stu_info左邊的key要和Student模型字段對應上,因為cls是外鍵,所以要對應一個班級的實例
# 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為過濾,支持多個參數,update是更新方法,支持多個參數
# Class.objects.filter(name="1901").update(name="1901_xiu")
"""
刪除操作
"""
# 將名字為1901_xiu的班級刪除掉,delete是刪除方法
# Class.objects.filter(name="1901_xiu").delete()
"""
查詢操作
"""
# 查詢單條,get返回實例,如果查詢結果沒有回報錯,
# filter查詢返回的結果是多個實例的列表,
# instance = Student.objects.get(pk=1)
#instance = Student.objects.filter(pk=1).first()
# 查詢多條,返回queryset類型(多個查詢結果實例的列表) 可以被迭代
# queryset = Student.objects.all() #
# for stu in queryset:
#學生的姓名 學生的年齡 學生的分數
# print(stu.name,stu.age,stu.score)
#對查詢集結果進行切片,取第0個到第4個,和列表的切片一樣
# queryset = Student.objects.filter().all()[:5] # limit 語句
# print(queryset.query) # 返回執行的sql語句
# 精準查找 兩條語句作用一樣,查詢姓名位小美的學生,結果返回查詢集
# 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 一個集合中的所有
# 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
# 第二種 : 牛逼的雙下劃線(跨表),可以用多個雙下劃線跨多張表
# 語句功能是查詢學生表中所有學生的姓名和學生所在班級的名稱
# cls__name 是cls雙下劃線name,cls 是Student中的cls字段,name是班級表中的name字段
# queryset = Student.objects.values('name','cls__name').all()
# 查詢一個班級所有學生,執行兩次sql語句
# cls1 = Class.objects.get(name='1701')
# queryset = Student.objects.filter(cls=cls1)
# 查詢一個班級所有學生,執行一次sql語句
# queryset = models.Student.objects.filter(cls__name='1903').all().values('name','cls__name')
# 查詢一個班級所有學生,起始表從班級表開始查詢,反向查詢
# stu_cls 是學生表中外鍵的別名
# queryset = Class.objects.get(name='1903').stu_cls.all()
# 按照分數查詢 大于90分
# queryset = Student.objects.filter(score__gt=90).all()
return HttpResponse('數據庫操作成功')
看完上述內容,你們掌握django中ORM的查詢語句是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。