Django中object.all是什么东西
前言
先抛出一个问题。银行就相当于一个数据库,你去银行取钱存钱办卡销卡,是你告诉银行柜员方便还是你自己去操作电脑办卡取卡方便?(你还不一定会,假设自动存款机还没发明),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
最新文章
- ASP.NET MVC SSO单点登录设计与实现
- 对C++虚函数的理解
- POJ 1681 Painter&#39;s Problem (高斯消元)
- C#编程总结 字符转码
- Android 系统ID介绍
- 使用VS2010开发Qt程序的一点经验(转载)
- 市委组织部考核项目——利用EasyUi中可编辑的DataGrid控件对多行数据进行编辑并提交
- PHP的面向对象编程
- LeetCode 解题报告--202Happy Number
- 读书雷达 l 业务分析师(BA)篇
- Babel6.x 转换ES6
- 数值分析1:三角函数的计算(C语言实现)
- Android:ListViewAdapter
- 在阿里云服务器windows server2012r iis上部署.net网站
- box-sizing:border-boxing的使用
- maven使用utf8等
- Spring-Data-Jpa环境配置与实际应用
- bzoj2243树链剖分+区间合并
- jsp、css中引入外部资源相对路径的问题
- DQN(Deep Reiforcement Learning) 发展历程(一)
热门文章
- LOJ 2979 「THUSCH 2017」换桌——多路增广费用流
- [CSP-S模拟测试]:party?(霍尔定理+最小割+树链剖分)
- Oralce-PL/SQL编程-游标
- Java学习之线程通信(多线程(Lock))--生产者消费者
- apt-cyg for Cygwin(setup-x86_64 .exe )在win10下的安装
- Bentley二次开发中的,沿曲线构造拉伸实体问题
- 厉害了,Java EE 再次更名为 Jakarta EE
- spring boot 多环境(dev、test、prod)配置文件---命令行切换
- WebSocket 网页聊天室
- FZU 1876 JinYueTuan(排列组合)