前言

先抛出一个问题。银行就相当于一个数据库,你去银行取钱存钱办卡销卡,是你告诉银行柜员方便还是你自己去操作电脑办卡取卡方便?(你还不一定会,假设自动存款机还没发明),object在数据库中就相当于银行里得银行柜员。

步入正题:

在django中的view.py中,我们可能回经常见到  book_set= Book.objects.all(),book_list = Book.objects.get()?

让我们疑惑的问题是,objects是个什么东西,book_set 和book_list 又是个神马东西?

object是Manager类型的对象,定义在from django.db import models中,是默认生成的,也就是objects = Modes.Manage() 。用途是数据库和模型对象交互的接口(api)。book_set返回的是个集合,book_list返回的是个列表。book = Book.objects.all(),这个翻译成银行得话就是,一个叫BOOK得人来到银行,通过一个名叫objects得柜员,查询BOOK得银行余额和银行卡信息,结果得到一个queryset对象

在book =BOOK.objects.get()或者book = BOOK.objects.all()中

  • BOOK是类名,就是你在model中创建的类
  • objects是django默认的管理器对象,就是刚才的比喻中的银行柜员,帮你完成各种操作。
  • get()或者all()是API,一种内置函数,也就是比喻钟银行柜员可以帮助我们完成的各种具体业务,不同的业务调用不同的API就可以了。
  • book通过all()得到的就是要给queryset()对象,也就是查询对象集合。

一,QuerySet 对象的创建方法

>> from blog.models import Blog
>>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
>>> b.save() 总之,一共有四种方法
# 方法 1
Author.objects.create(name="WeizhongTu", email="tuweizhong@163.com") # 方法 2
twz = Author(name="WeizhongTu", email="tuweizhong@163.com")
twz.save() # 方法 3
twz = Author()
twz.name="WeizhongTu"
twz.email="tuweizhong@163.com"
twz.save() # 方法 4,首先尝试获取,不存在就创建,可以防止重复
Author.objects.get_or_create(name="WeizhongTu", email="tuweizhong@163.com")
# 返回值(object, True/False)

备注:前三种方法返回的都是对应的 object,最后一种方法返回的是一个元组,(object, True/False),创建时返回 True, 已经存在时返回 False

对比得知,object这个管理器对象帮了我们很多忙,我们不用实例化对象,不用save(),而是交给Author.object去实现。

举个例子吧,如果我们把数据库比作银行,那么object对象就相当于柜员,能帮助你处理各种业务。如果没有得话,去银行取钱,我们得自己登记,自己去金库拿钱,记账,锁门.........不太现实吧。同理,你去数据库取个数据,没有objects对象,是不是很麻烦?

其实换个角度来讲,你去银行办理得一些业务,是银行柜员帮你在银行得数据库里进行得增删改查操作,银行柜员得名字可以叫object(默认得名字),当然也可以叫小李,小王,不过你得自定义罢了。xiaoli = models.Manage()也是可以得。

你看看,此时此刻,有没有认识到,一切皆对象,这个面向对象编程得伟大之处。

二,Django中查询常用的API

# 查询相关API:

#  <1>filter(**kwargs):      它包含了与所给筛选条件相匹配的对象

#  <2>all():                 查询所有结果

#  <3>get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

#-----------下面的方法都是对查询的结果再进行处理:比如 objects.filter.values()--------

#  <4>values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列

#  <5>exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象

#  <6>order_by(*field):      对查询结果排序

#  <7>reverse():             对查询结果反向排序

#  <8>distinct():            从返回结果中剔除重复纪录

#  <9>values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

#  <10>count():              返回数据库中匹配查询(QuerySet)的对象数量。

# <11>first():               返回第一条记录

# <12>last():                返回最后一条记录

#  <13>exists():             如果QuerySet包含数据,就返回True,否则返回False。

另外关于ApI,给大家推荐一篇不错得文章

https://blog.csdn.net/cumtdeyurenjie/article/details/80211896

Django中object.all是什么东西的更多相关文章

  1. Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM)

    Django中ORM介绍和字段及字段参数   Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简 ...

  2. Django中的Object Relational Mapping(ORM)

    ORM 介绍 ORM 概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用 ...

  3. Django 中的 WSGI

    Django 源码小剖: Django 中的 WSGI 2013-09-06 22:31 by 捣乱小子, 334 阅读, 0 评论, 收藏, 编辑 Django 其内部已经自带了一个方便本地测试的小 ...

  4. [Django高级]理解django中的中间件机制和执行顺序

    原文来自 Understanding Django Middlewares, 这篇文章从整体上介绍了django中中间件定义,作用,和怎么样自己写中间件 –orangleliu. 注:middlewa ...

  5. Django中的分页,cookies与session

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  6. Django中-事务操作

    如何在Django中进行事务操作呢? 近期,公司里要使用Django开发一套金融相关的系统. 涉及钱了.....安全安全安全 如果钱转到一半,系统崩了,咋办? 如果钱汇到一半,系统崩了,咋办? 如果东 ...

  7. django 中的聚合和分组 F查询 Q查询 事务cookies和sessions 066

    1 聚合和分组 聚合:对一些数据进行整理分析 进而得到结果(mysql中的聚合函数) 1aggregate(*args,**kwargs) : 通过对QuerySet进行计算 ,返回一个聚合值的字典. ...

  8. Django中的select_related与prefetch_related

      Django是一个基于Python的网站开发框架,一个很重要的特点就是Battery Included,简单来说就是包含了常规开发中所需要的一切东西,包括但不限于完整的ORM模型.中间件.会话处理 ...

  9. Django中的session和cookie及分页设置

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

随机推荐

  1. 杂项:电子表格程序-u

    ylbtech-杂项:电子表格程序-u 1.返回顶部 1.1 https://www.gemboxsoftware.com/spreadsheet 1.1 https://www.spreadshee ...

  2. 安装php时,configure: error: xml2-config not found. Please check your libxml2 installation

    参考文章:http://blog.csdn.net/anljf/article/details/6981247 安装php时的报错configure: error: xml2-config not f ...

  3. python中6个序列的内置类型分别是什么,列表和元组的异同有哪些

    1.Python中6个序列的内置类型分别是什么? Python包含6中内建的序列,即列表.元组.字符串.Unicode字符串.buffer对象和 xrange 对象.序列通用的操作包括:索引.长度.组 ...

  4. Java并发AtomicLong接口

    java.util.concurrent.atomic.AtomicLong类提供了可以被原子地读取和写入的底层long值的操作,并且还包含高级原子操作. AtomicLong支持基础long类型变量 ...

  5. Java并发Lock接口

    java.util.concurrent.locks.Lock接口用作线程同步机制,类似于同步块.新的锁定机制更灵活,提供比同步块更多的选项. 锁和同步块之间的主要区别如下: 序列的保证 - 同步块不 ...

  6. MySQL 同一字段匹配多个值

    delete from api_log WHERE curl LIKE '%.css' or curl LIKE '%.js' or curl LIKE '%.JPG'; 删除字段curl以 js,c ...

  7. 注册服务到服务中心(Consul)

    注册服务到服务中心(Consul) 添加POM文件中的依赖 在POM文件添加如下依赖: <dependency> <groupId>org.springframework.bo ...

  8. MyBatis中XML 映射配置文件的简单介绍

    官网写的比较具体,可以查看以下的网站: http://www.mybatis.org/mybatis-3/zh/configuration.html 另外,实际用到标准的CRUD的操作和查询列表, & ...

  9. hibernate保存数据到mysql时的中文乱码问题

    因为hibernate底层使用的是jdbc的技术,所以我参考了别人使用jdbc保存数据到mysql里面时解决乱码问题的方法! 首先要告诉数据库要插入的字符串的字符集,mysql 默认使用的字符集是 l ...

  10. 发送xml数据