Django中常用的查询数据方法及查询对象的条件详解

(1)常用的查询方法:

1.获取所有记录:

s = User.objects.all()

2.获取第一条数据:

s = User.objects.first()

3.获取最后一条数据:

s = User.objects.last()

关于二、三两个方法注意点:

对于QuerySet对象,我们也是可以通过下标取值获取对应的实例对象。如下所示——虽然这两个方法作用一致(获取到对应的实例对象),但是推荐使用(而且一般使用的)都是first()方法及last()方法。

原因——如果查询的数据不存在的话,使用下标查询会报错;但是使用first()方法不会报错,会返回None。

s = User.objects.filter(age=18).first()     #获取QuerySet中的第一条数据
s2 = User.objects.filter(age=18).last()     #获取QuerySet中的最后一条数据
s = User.objects.filter(age=18)[0]
print(s)

应用场景:

a = User.objects.get(id=56)             #使用get方法获取一个实例对象,我们可以保证id不会重复,但是不能保证id为56的数据是否存在
#但是使用.first()方法哪怕它不存在也不会报错!
a = User.objects.filter(id=56).first()

4.根据参数提供的条件获取过滤后的记录:

【注意:filter(**kwargs)方法:根据参数提供的提取条件,获取一个过滤后的QuerySet】

s = User.objects.filter(name= "xiaoming" )	# 过滤得到name为xiaoming的数据

5.排除name为xiaoming的数据:

s = User.objects.exclude(name='xiaoming')

6.获取一个记录对象:

【注意:get返回的对象具有唯一性质,如果符合条件的对象有多个,则get报错!】

s = User.objects.get(name = "xiaoming" )

7.对结果排序:

#根据age升序排序:
c = User.objects.all().order_by("age")
#根据age逆向排序:
c2 = User.objects.all().order_by("-age")
#双重排序:age升序排序,如果有age相同的则以id升序排序:
c3 = User.objects.all().order_by("age","id")

8.将返回的QuerySet中的Model转换为字典:

s = User.objects.all().values()
#作用:现在是字典形式了(之前的QuerySet是类似于列表的对象),就可以使用字典的方法进行获取数据了:
print(s[0].get("name"))

QuerySet对象格式:

<QuerySet [<User: name:taka, age:18>, <User: name:xiaopo, age:18>, <User: name:xiaohong, age:18>]>

使用values()方法转变后的格式:

<QuerySet [{'id': 1, 'name': 'taka', 'age': 18}, {'id': 2, 'name': 'xiaopo', 'age': 18}, {'id': 3, 'name': 'xiaohong', 'age': 18}]>

9.获取当前查询到的数据的总数:

e = User.objects.count()	 # (所有QuerySet对象都可以使用此方法)

(2)常用的查询对象的条件:

查找对象的条件的意思是传给以上方法的一些参数。相当于是SQL语句中的where语句后面的条件,语法为字段名__规则!

1.exact相当于等号:(以下两种方法作用一致!)

rs = User.objects.filter(name__exact='xiaoming')
rs = User.objects.filter(name='xiaoming')

2.iexact:跟exact差不多,只是忽略大小写的匹配。

3.contains 包含:

rs = User.objects.filter(name__contains='xiao')     #查询name属性值中包含xiao的

4.icontains跟contains差不多,只是忽略大小写。

5.startwith 以什么开始:

rs = User.objects.filter(name__startswith='xiao')  # 查询name属性值以xiao开头的

6.istartwith跟startwith差不多,只是忽略大小写。

7.endwith 以什么结尾:。

8.isendwith跟endwith差不多,只是忽略大小写。

9.in 成员所属:

rs = User.objects.filter(age__in=[18,19,20])  # 查询age值为18,19,20的数据

10.gt大于

rs = User.objects.filter(age__gt=20)  # 查询age值大于20的数据

11.gte 大于等于。

12.lt 小于。

13.lte 小于等于。

14.range 区间,包含两头。

rs = User.objects.filter(age__range=(18,20))  # 查询age值在18-20之间的数据(包含18和20)

15.isnull 判断是否为空。

总结

到此这篇关于Django中常用的查询数据方法及查询对象的条件的文章就介绍到这了,更多相关Django查询数据方法及条件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • django 按时间范围查询数据库实例代码

    从前台中获得时间范围,在django后台处理request中数据,完成format,按照范围调用函数查询数据库. 介绍一个简单的功能,就是从web表单里获取用户指定的时间范围,然后在数据库中查询此时间范围内的数据. 数据库里的model举例是这样: class book(models.Model): name = models.CharField(max_length=50, unique=True) date = models.DateTimeField() def __unicode__(s

  • Django 查询数据库并返回页面的例子

    views.py 视图文件 message = None all_message = UserMessage.objects.filter(name='测试2') if all_message: message = all_message[0] return render(request, 'message_form.html',{ 'my_message':message }) .html 模板文件 <input id="name" type="text"

  • Django查询数据库的性能优化示例代码

    前言 Django数据层提供各种途径优化数据的访问,一个项目大量优化工作一般是放在后期来做,早期的优化是"万恶之源",这是前人总结的经验,不无道理.如果事先理解Django的优化技巧,开发过程中稍稍留意,后期会省不少的工作量. 现在有一张记录用户信息的UserInfo数据表,表中记录了10个用户的姓名,呢称,年龄,工作等信息. models文件 from django.db import models class Job(models.Model): title=models.Char

  • Django中对数据查询结果进行排序的方法

    在你的 Django 应用中,你或许希望根据某字段的值对检索结果排序,比如说,按字母顺序. 那么,使用 order_by() 这个方法就可以搞定了. >>> Publisher.objects.order_by("name") [<Publisher: Apress>, <Publisher: O'Reilly>] 跟以前的 all() 例子差不多,SQL语句里多了指定排序的部分: SELECT id, name, address, city,

  • 在django中查询获取数据,get, filter,all(),values()操作

    django 中当我们要查询获取数据时: 数据库中的信息: 如一个学生信息表 students: get方法: students.objects().get(a = b) 其中a为students表中的一个属性如id,name 等 如:students.objects().get(name = '张三') 即获取name为张三的学生的信息 filter 用法与get相同 但是get必须只能取一个数据 filter 能去0,1,多个数据 即上述中如果表中有多个学生都叫张三同名了,get就会报错 同

  • Django框架中数据的连锁查询和限制返回数据的方法

    连锁查询 通常我们需要同时进行过滤和排序查询的操作. 因此,你可以简单地写成这种"链式"的形式: >>> Publisher.objects.filter(country="U.S.A.").order_by("-name") [<Publisher: O'Reilly>, <Publisher: Apress>] 你应该没猜错,转换成SQL查询就是 WHERE 和 ORDER BY 的组合: SELEC

  • Django分页查询并返回jsons数据(中文乱码解决方法)

    一.引子 Django 分页查询并返回 json ,需要将返回的 queryset 序列化, demo 如下: # coding=UTF-8 import os from django.core import serializers from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.shortcuts import render from django.http import

  • Django中常用的查询数据方法及查询对象的条件详解

    (1)常用的查询方法: 1.获取所有记录: s = User.objects.all() 2.获取第一条数据: s = User.objects.first() 3.获取最后一条数据: s = User.objects.last() 关于二.三两个方法注意点: 对于QuerySet对象,我们也是可以通过下标取值获取对应的实例对象.如下所示--虽然这两个方法作用一致(获取到对应的实例对象),但是推荐使用(而且一般使用的)都是first()方法及last()方法. 原因--如果查询的数据不存在的话,

  • Django中使用Json返回数据的实现方法

    在一个网站在,大量数据与前端交互,JSON是最好的传递数据方式了. 在Django中,使用JSON传输数据,有两种方式,一种是使用Python的JSON包,一种是使用Django的JsonResponse 方法一:使用Python的JSON包 from django.shortcuts import HttpResponse import json def testjson(request): data={ 'patient_name': '张三', 'age': '25', 'patient_

  • django中操作mysql数据库的方法

    目录 1.准备工作(django连接数据库) 2.django操作数据库(ORM) 2.1 ORM简介 2.2 创建表和字段 2.3 字段的增删改查 2.4 单表数据的增删改查 2.4.1单表数据的查询 2.4.2单表数据的增加 2.4.3单表数据的修改 2.4.4单表数据删除 2.4.5补充13条单表查询 2.4.6 神奇的双下划线查询 2.5 多表数据操作 2.5.1 orm创建表关系 2.5.2 一对多关系的增删改 2.5.3 多对多关系的增删改 2.5.4 多表的查询操作 2.6 字段类

  • C#开发中常用的加密解密方法汇总

    相信很多人在开发过程中经常会遇到需要对一些重要的信息进行加密处理,今天给大家分享我个人总结的一些加密算法: 常见的加密方式分为可逆和不可逆两种方式 可逆:RSA,AES,DES等 不可逆:常见的MD5,SHAD等 一.MD5消息摘要算法 我想这是大家都常听过的算法,可能也用的比较多.那么什么是MD5算法呢?MD5全称是message-digest algorithm 5,简单的说就是单向的加密,也就是说无法根据密文推导出明文. MD5主要用途: 1.对一段信息生成信息摘要,该摘要对该信息具有唯一

  • SpringMVC中常用注解与使用方法详解

    MVC简介 MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写, 是一种用于设计创建 Web 应用程序表现层的模式. Model(模型): 通常指的就是我们的数据模型.作用一般情况下用于封装数据. View(视图): 通常指的就是我们的 jsp 或者 html.作用一般就是展示数据的. 通常视图是依据模型数据创建的. Controller(控制器): 是应用程序中处理用户交互的部分.作用一般就是处理程序逻辑的.

  • 详解Django中 render() 函数的使用方法

    render() 函数 在讲 render() 函数之前,我们在 Django 项目 index 文件夹的 urls.py 和 views.py 中编写如下功能代码:(不难,望读者细心阅之) # index的 urls.py from django.urls import path form . import views urlpatterns = [ # 定义首页的路由 path(' ', views.index, name='index'), ] # index的views.py from

  • Mysql中一千万条数据怎么快速查询

    目录 普通分页查询 如何优化 偏移量大 采用id限定方式 优化数据量大问题 普通分页查询 当我们在日常工作中遇到大数据查询的时候,第一反应就是使用分页查询. mysql支持limit语句来选取指定的条数数据,而oracle可以使用rownum来选取 mysql分页查询语句如下: SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 第一个参数用来指定第一个返回记录行的偏移量 第二个参数指定返回记录行的最大数目 当相同的偏移量时

  • Android中常用的XML生成方法实例分析

    本文实例讲述了Android中常用的XML生成方法.分享给大家供大家参考.具体如下: 1. java代码: package com.android.antking.xml; import java.io.OutputStream; import java.util.List; import org.xmlpull.v1.XmlSerializer; import android.util.Xml; /**采用pull 生成xml文件 * * @author antkingwei * */ pub

  • 在Django中URL正则表达式匹配的方法

    Django框架中的URL分发采用正则表达式匹配来进行,以下是正则表达式的基本规则: 官方演示代码: from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/

  • python 实现提取某个索引中某个时间段的数据方法

    如下所示: from elasticsearch import Elasticsearch import datetime import time import dateutil.parser class App(object): def __init__(self): pass def _es_conn(self): es = Elasticsearch() return es def get_data(self, day,start,end): index_ = "gather-apk-20

随机推荐