python之路_django ORM模型(单表)(二)
2020-01-14 04:50
106 查看
一、查询表记录
1、查询相关API
现将主要的查询API使用实例介绍如下,其中Student为定义的表类:
(1).Student.objects.all() #返回的QuerySet类型 查询所有记录 [obj1,obj2....] (2).Student.objects.filter() #返回的QuerySet类型 查询所有符合条件的记录 (3).Student.objects.exclude() #返回的QuerySet类型 查询所有不符合条件的记录,过滤条件之外的 (4).Student.objects.get() #返回的models对象 查询结果必须有且只有一个,否则报错 (5).Student.objects.all().first() #返回的models对象 查询结果集合中的第一个,默认是按照主键进行排序的 (6).Student.objects.filter().last() #返回的models对象 查询结果集合中的最后一个,默认是按照主键进行排序的 (7).Student.objects.all().values("name","class_id") #返回的QuerySet类型 ,列表中存放的字典 (8).Student.objects.all().values_list("name","class_id") #返回的QuerySet类型 ,列表中存放的元组 (9).Student.objects.all().order_by("class_id") #按指定字段排序,不指定,按主键排序 (10).Student.objects.all().count() #返回的记录个数 (11).Student.objects.all().values("name").distinct() #返回记录进行去重 (12).Student.objects.all().exist() #查询结果是否存在,返回True或者False
filter():
如下例,查询结果为queryset类型,括号内为过滤条件,多个条件为且的关系。
stu_list=Student.objects.filter(name="龙华",class_id=6)
exclude():
如下例,查询结果为queryset类型,结果为除括号内过滤条件之外的数据。
stu_list=Student.objects.exclude(name="alex")
first():
如下例,查询结果为models类型,是按照主键排序的方式的第一个结果。
#stu_obj=Student.objects.all().first() stu_obj=Student.objects.filter(birth__year="2017").first() print(stu_obj.name)
order_by():
如下例,查询结果为queryset类型,对查询结果进行排序。
stu_list=Student.objects.all().order_by("-class_id") #降序排列 stu_list=Student.objects.all().order_by("-class_id") #升序排列
values()与value_list()区别:
ret=Book.objects.values_list("title") #values_list("title")前即可加all()也可以加filter() print(ret) #<QuerySet [('王子与青蛙',), ('公主的记忆',), ('爱与恨',)]> ret=Book.objects.values("title") #values"title")前即可加all()也可以加filter() print(ret) #<QuerySet [{'title': '王子与青蛙'}, {'title': '公主的记忆'}, {'title': '爱与恨'}]>
get():
过滤条件指向的数据必须有且只有一个记录,否则报错,结果为model类型。
ret=Student.objects.get(class_id="5") print(ret.name)
exist():
当确实有数据存在的时候,如下两种方式均可以执行if语句,但是从执行时翻译成的sql语句,我们就可看出exist存在的意义,他只会查询一条记录,这对数据量很大的表,查询效率是很高的。
#方式一: stu_list=Student.objects.all().exists() #翻译的sql语句:SELECT (1) AS "a" FROM "app01_student" LIMIT 1; args=() if stu_list: print("OK") #方式二: stu_list=Student.objects.all() #翻译的sql语句:SELECT "app01_student"."tid", "app01_student"."name", "app01_student"."birth", "app01_student"."age" FROM "app01_student"; if stu_list: print("OK")
2、双下划线单表查询
具体介绍如下:
转载于:https://www.cnblogs.com/Ebola-/p/8734133.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- python django -2 ORM模型
- Python之路--Django--模型
- 第六章 python django 数据库【ORM模型 模型增减改查 模型常用属性 外键 表关系 模型操作 查询操作 聚合函数 QuerySet】
- Python自动化之django orm之Q对象
- Python的Django的学习之路(第三篇)
- python django框架的模型的创建
- python初学-04django(数据库,模型)
- python 自动化之路 day 19 Django基础[二]
- Python Django 学习 (二) 【Django 模型】
- Python笔记day60~61(Django)|初识Django、APP、ORM
- python之路-django深入
- Python Django ORM创建基本类以及生成数据结构
- Django 模型系统(model)&ORM--进阶
- Python - Django - ORM 自定义 char 类型字段
- python Django 模型操作
- Django2.0-db(11)-ORM模型迁移
- python3开发进阶-Django框架中的ORM的常用操作的补充(F查询和Q查询,事务)
- pythonWeb -- Django开发- 模型Model 和 数据库的操作
- python后台架构Django教程——数据模型Model
- Python - Django - ORM 聚合查询和分组查询