Django(8)ORM单表实例(二)

简介: Django(8)ORM单表实例(二)

- exclude()


  • exclude()方法用于查询不符合条件的数据,同样返回QuerySet数据类型,实例:


# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.exclude(publish="金庸出版社")
    for i in books:
        print(i.title)
    #print(books,type(books))
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试


e476adb20b91472fabb23c26823ac638.png


- get()


  • get()方法用于查询符合条件的返回模型类的对象,符合条件的对象只能有一个,如果符合筛选条件的对象超过一个或者没有,都会抛出错误,实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #三个查询代码依次执行
    books = models.Book.objects.get(pk=2)
    #books = models.Book.objects.get(pk=5)
    #books = models.Book.objects.get(price=200)
    print(books,type(books))
    return HttpResponse('<p>查找成功!</p>')


  • 访问测试


64e5542f114341df96eb1b489e50e676.png

e86940dd643946d798e3db569cdd6ccc.png

# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.get(pk=2)
    books = models.Book.objects.get(pk=5)
    #books = models.Book.objects.get(price=200)
    print(books,type(books))
    return HttpResponse('<p>查找成功!</p>')

访问测试,发现报错,这是因为主键id没有等于5的


dbc3d759e877479484ddf63be4efd804.png

f1919d7469334561a4007aa498526dcb.png

# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.get(pk=2)
    #books = models.Book.objects.get(pk=5)
    books = models.Book.objects.get(price=200)
    print(books,type(books))
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试,因为price字段等于200的有两条数据,返回了两个,所以报错了


dbc869f629df45eb8bc51a09d7224738.png

2bec037d67a647699ee9c7ce277d1fc5.png

- order_by()


  • order_by()方法用于对查询结果进行排序,返回QuerySet类型数据
  • 注意:


  1. 参数的字段名要加引号
  2. 降序是在字段前面加一个杠-


  • 实例:


# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.order_by("price")
    #books = models.Book.objects.order_by("-price")
    print(books)
    for i in books:
        print(i.price)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

ebc204a555c3465ea4493d950ec0c107.png

2f0d29724960480d805e6d10fe76893d.png


# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.order_by("price")
    books = models.Book.objects.order_by("-price")
    print(books)
    for i in books:
        print(i.price)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试


66a43c4209ac4a1c95ebea62e3fafd14.png

d1d1b3ec5aa24297a20f5a493aafdbdb.png


- reverse()


  • reverse()方法用于对查询结果进行反转,返回QuerySet数据类型,实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.order_by("price")
    books = models.Book.objects.order_by("-price").reverse()
    print(books)
    for i in books:
        print(i.price)
    return HttpResponse('<p>查找成功!</p>')

访问测试


2ea8c6cf92bd436c8dd30e57afada84f.png

9589db7bc8f94b90b05cbf05cf4366c2.png

# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.order_by("price").reverse()
    #books = models.Book.objects.order_by("-price").reverse()
    print(books)
    for i in books:
        print(i.price)
    return HttpResponse('<p>查找成功!</p>')

访问测试

826a10746dc8405b92889df20fd32bb6.pngf03c7e1a3801460b92928764b7e149de.png


- count()


  • count()方法用于查询数据的数量,返回的是整数,实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.count()
    #books = models.Book.objects.filter(price=200).count()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试


8ec3ce497d804fbdbf4781d5ba962357.png

21b9860b12db455eafe63cde3377997f.png


  • 也可以统计条件查询的数据量
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.count()
    books = models.Book.objects.filter(price=200).count()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试


7a1a92cc1502486ea0257da594925095.png

82e1ac865bfd469fae31e212cbc803a1.png


- first()


  • first()方法返回第一条数据,返回的数据是模型类的对象,可以使用索引下标[0],实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.first()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试


461c939ead4c446c950f87c5b4879f55.png

6c4f5492b3414235b0f777bec5ea7388.png


  • 同样可以应用在条件查询上
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(price=300).first()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

ab7ee50f12404d409578dedc07eccd0d.png

8f2aede5e03d443dadb1edf35eb71b58.png


- last()


  • last()方法和first()相反,返回最后一条数据
  • 注意:


不能使用下标索引[-1],因为ORM没有逆向索引

  • 实例:


# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(price=200).last()
    print(books)
    books = models.Book.objects.last()
    print(books)
    return HttpResponse('<p>查找成功!</p>')

访问测试

1cea3b78ddfc4e33a2917869f67f81d2.png

26ccca35a6274beea8e78b77f22d7b2a.png


- exists()


  • exists()方法用于判断查询结果中是否有数据,返回的布尔值,有数据为True,没有则是False
    注意:判断的数据类型只能是QuerySet数据类型,不能是整型或者模型类对象
  • 实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.exists()
    #books = models.Book.objects.count().exists()
    #books = models.Book.objects.first().exists()
    print(books)
    return HttpResponse('<p>查找成功!</p>')

访问测试,存在数据,并且数据类型为QuerySet


19ae0da98860418c837080221e6c12e0.png

011fd8e65bb84f1f98e0bc1ec89a624e.png

# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.exists()
    books = models.Book.objects.count().exists()
    #books = models.Book.objects.first().exists()
    print(books)
    return HttpResponse('<p>查找成功!</p>')


访问测试,返回数据类型不能是int


d881471d2f204c5f8771f5b26e105e5e.png

# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.exists()
    #books = models.Book.objects.count().exists()
    books = models.Book.objects.first().exists()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试,返回数据类型不能是模型类对象



819f02a49aef4fbbac66dbb13b7ab439.png

- values()


  • values()方法用于查询部分字段的数据,返回一个QuerySet数据类型,每条数据都是一个字典


  • 注意:


  1. 参数的字段名称要加引号
  2. 想要字段名称和数据使用values
  • 实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.values("pk","price","title") #只查询指定字段,返回的QuerySet中每条数据都是一个字典
    print(books[0]["price"],type(books))
    for i in books:
        print(i)
    return HttpResponse('<p>查找成功!</p>')

访问测试


62a619822114403684914a426c03a1b7.png

ad85c20a92954da1a0de284b1de55c2a.png


- values_list()


  • values_list()方法用于查询部分字段的数据,返回一个QuerySet数据类型,每条数据都是一个元组,实例:


  • 注意:


  1. 参数的字段名称要加引号
  2. 想要字段名称和数据使用values_list
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models
def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.values_list("pk","price","title")
    print(books[1][2],type(books))
    for i in books:
        print(i)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试


4e5aea7181b749c4b267fd0f49321b57.png

f6166c7dffbf4a499b00b8150bcfff76.png

目录
相关文章
|
2月前
|
数据管理 数据挖掘 调度
Django后端架构开发:URLconf到ORM深度剖析
Django后端架构开发:URLconf到ORM深度剖析
46 1
|
2月前
|
数据库 Python
Django ORM
【8月更文挑战第23天】
32 4
|
2月前
|
API 数据库 开发者
【独家揭秘】Django ORM高手秘籍:如何玩转数据模型与数据库交互的艺术?
【8月更文挑战第31天】本文通过具体示例详细介绍了Django ORM的使用方法,包括数据模型设计与数据库操作的最佳实践。从创建应用和定义模型开始,逐步演示了查询、创建、更新和删除数据的全过程,并展示了关联查询与过滤的技巧,帮助开发者更高效地利用Django ORM构建和维护Web应用。通过这些基础概念和实践技巧,读者可以更好地掌握Django ORM,提升开发效率。
22 0
|
2月前
|
SQL Go 数据库
Django入门到放弃之ORM多表操作
Django入门到放弃之ORM多表操作
|
2月前
|
SQL 关系型数据库 MySQL
Django入门到放弃之ORM单表操作
Django入门到放弃之ORM单表操作
|
3月前
|
SQL 数据库 Python
Django框架数据库ORM查询操作(6)
【7月更文挑战第6天】```markdown Django ORM常用数据库操作:1) 查询所有数据2) 根据ID查询 3) 精确查询 4) 分页排序
57 1
|
4月前
|
JSON 缓存 数据库
Django ORM的QuerySet:解锁数据库交互的魔法钥匙
Django ORM的QuerySet:解锁数据库交互的魔法钥匙
|
4月前
|
存储 安全 数据库
Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践
Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践
|
4月前
|
存储 SQL 数据处理
Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解
Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解
|
4月前
|
数据库 开发者 Python
Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作
Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作