美文网首页django
Django-14 ORM 普通查询,条件查询,查询谓词

Django-14 ORM 普通查询,条件查询,查询谓词

作者: JuliusL | 来源:发表于2021-07-14 07:21 被阅读0次

1. 普通查询

  • 数据库的查询需要使用管理器对象进行
  • 通过MyModel.objects管理器方法调用查询方法
方法 说明
all() 查询全部记录,返回QuerySet查询对象
get() 查询符合条件的单一记录
filter() 查询符合条件的多条记录
exclude() 查询符合条件之外的全部记录
...
  • all()

用法:MyModel.objects.all()
作用:查询MyModel实体中的所有的数据
等同于select * from table
返回值:QuerySet容器对象,内部存放MyModel实例

from bookstore.models import Book
books = Book.objects.all()
from book in books:
  print('书名',book.title,'出版社',book.pub)

tips:_str_类似java的toString(),可以打印对象的时候更友好

  • values()

用法:MyModel.objects.values('列1','列2')
作用:查询部分列的数据并返回
等同于select 列1,列2 from table
返回值:QuerySet
- 返回查询结果容器,容器内存字典,每一个字典代表一条数据,格式为:{'列1':'值1','列2':'值2'}

>>> a2 = Book.objects.values('title','pub')
>>> a2
<QuerySet [{'title': 'Python', 'pub': '清华大学出版社'}, {'title': 'Django', 'pub': '清华大学出版社'}]>
  • values_list()

用法:MyModel.objects.values_list('列1','列2')
作用:返回元组形式的查询结果
等同于select 列1,列2 from table
返回值:QuerySet,容器内存'元组'
- 会将查询出来的数据封装到元组中,再封装到查询集合QuerySet中

>>> a2 = Book.objects.values_list('title','pub')
>>> a2
<QuerySet [('Python', '清华大学出版社'), ('Django', '清华大学出版社')]>
  • order_by()
    用法:MyModel.objects.order_by('-列1','列2')
    作用:与all()方法不同,它会用SQL语句的ORDER BY 子句对查询结果进行根据某个字段选择性的排序
    说明:默认是按照升序,降序排序则需要在列前增加'-'表示
>>> a2 = Book.objects.values_list('title','pub').order_by('-price')
>>> a2
<QuerySet [('Django', '清华大学出版社'), ('Python', '清华大学出版社')]>

tips:用 querySet对象.query可以反查出SQL的语句

>>> print(a2.query)
SELECT `book`.`title`, `book`.`pub` FROM `book` ORDER BY `book`.`price` DESC

测试用例:

image.png
  • bookstore/templates/bookstore/all_book.html
<body>
<table border="1">
    <tr>
        <th>id</th>
        <th>title</th>
        <th>pub</th>
        <th>price</th>
        <th>market_price</th>
        <th>op</th>
    </tr>
    {% for book in all_book %}
    <tr>
        <th>{{book.id}}</th>
        <th>{{book.title}}</th>
        <th>{{book.pub}}</th>
        <th>{{book.price}}</th>
        <th>{{book.market_price}}</th>
        <th>
            <a href="">更新</a>
            <a href="">删除</a>
        </th>
    </tr>
    {% endfor %}
</table>
</body>
  • bookstore/views.py
def all_book(request):
    all_book = Book.objects.all()
    return render(request,'bookstore/all_book.html',locals())
  • mysite1/urls.py
urlpatterns = [
  path('bookstore/',include('bookstore.urls')),
]
  • bookstore/urls.py
urlpatterns = [
    path('all_book',views.all_book)
]

2. 条件查询

  • filter(条件)

    语法:MyModel.objects.filter(属性1=值1,属性2=值2)
    作用:返回包含此条件的全部的数据集
    返回值:QuerySet容器对象,内部存放MyModel实例
    说明:当多个属性在一起时为“与”关系,即当

  • exclude(条件)

    语法:MyModel.objects.exclude(条件)
    作用:返回不包含此条件的全部的数据集

  • get(条件)

    语法:MyModel.objects.get(条件)
    作用:返回满足条件的唯一一条数据
    说明:该方法只能返回一条数据
    查询结果多余一条 数据则抛出异常
    【Model.MultipleObjectsReturned异常】
    查询结果如果没有数据则抛出异常
    【Model.DoesNotExist 异常】

3. 查询谓词(非等值的过滤查询)

  • 定义:做更灵活的条件查询时需要使用查询谓词
  • 说明:每一个查询谓词是一个独立的查询功能
  • __exact:等值匹配

    示例:Author.objects.filter(id__exact=1)

  • __contains:包含指定值

    示例:Author.objects.filter(name__contains='w')

  • __startswith:以xxx开始
  • __endswith:以xxx结束
  • __gt:大于指定值
  • __gte:大于等于
  • __lt:小于
  • __lte:小于等于
  • __in:查找数据是否在指定范围内

    示例:Author.objects.filter(country__in=['中国','日本','韩国'])

  • __range:查找数据是否在指定的区间范围内

    示例:Author.objects.filter(age__range=(35,50))

相关文章

  • Django-14 ORM 普通查询,条件查询,查询谓词

    1. 普通查询 数据库的查询需要使用管理器对象进行 通过MyModel.objects管理器方法调用查询方法 方法...

  • 4.SQL之数据查询(DQL)

    DQL--数据查询语言 谓词:select 查询数据 基本语法 基础查询 查询多个字段 去除重复记录 起别名 条件...

  • iOS-NSPredicate

    // 谓词的条件查询 > 、< 、==、!=NSPredicate *predicate1 = [NSPredic...

  • 测试人员编写常用SQL查询语句

    一、查询数值型数据: SELECT*FROMtb_nameWHEREsum>100; 查询谓词:>,=,<,<>,...

  • hibernate中的查询

    HQL 查询所有 条件查询 分页查询 Criteria 查询所有 条件查询 分页查询 查询总记录 原生SQL

  • 谓词查询

    什么是谓词查询 NSPredicate类是用来定义逻辑条件约束的获取或内存中的过滤搜索。 可以使用谓词表示逻辑条件...

  • 2018-11-28 ORM操作数据库

    一、ORM查询数据库 1.1 filter()过滤器 -- 精确查询  作用: 返回符合条件的数据 对象.obje...

  • mysql数据库中的多表关联查询

    条件查询 查询全部 查询单独信息 条件查询(有范围) 模糊查询 (like) 排序(order by) 查询我们...

  • NSpredicate

    用途:谓词,可以指定过滤器的条件,用于对集合里面的元素进行筛选;也可以定义模糊查询的条件,用于模糊查询。类似SQL...

  • mongoose学习笔记

    首先是基础crud操作 查询简单查询条件查询 插入 更新 查询 简单查询 mongoose: 条件查询 (>) 大...

网友评论

    本文标题:Django-14 ORM 普通查询,条件查询,查询谓词

    本文链接:https://www.haomeiwen.com/subject/dttlpltx.html