假设一个Blog的实例b5已经被保存在数据库中,这个例子更改了它的名字,并且在数据库中更新它的记录: >>> b5.name = 'New name' >>> b5.save() 上面的代码在背后执行了...查询集是延迟的 QuerySets 是惰性的 – 创建 QuerySet 的动作不涉及任何数据库操作。...QuerySet 第一次运行时,会执行数据库查询,接下来 Django 就在 QuerySet 的缓存中保存查询的结果,并根据请求返回这些结果(比如,后面再次调用这个 QuerySet 的时候)。...它运行时立即删除对象而不返回任何值。例如: e.delete() 你也可以一次性删除多个对象。每个 QuerySet 都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象。...1.0 中新增的: 请查看版本文档 有时你想对 QuerySet 中的所有对象,一次更新某个字段的值。
首次对QuerySet进行求值 —— 同时发生数据库查询 ——Django 将保存查询的结果到QuerySet的缓存中并返回明确请求的结果(例如,如果正在迭代QuerySet,则返回下一个结果)。...使用commit=False 的另外一个副作用是在模型具有多对多关系的时候。 如果模型具有多对多关系而且当你保存表单时指定commit=False,Django 不会立即为多对多关系保存表单数据。 ...在你手工保存由表单生成的实例之后,你可以调用save_m2m() 来保存多对多的表单数据。 ...如果给定实例的数据在绑定数据中没有更改,那么实例将不会保存到数据库,并且不会包含在返回值中(在上面的示例中为instances)。...如果您想在自己的管理JavaScript中使用jQuery而不包含第二个副本,则可以使用更改列表上的django.jQuery对象和添加/编辑视图。
一、查询基础QuerySet 详解Django 中通过模型类的 Manager 构建 QuerySet 来检索数据库对象,其核心特性包括:代表数据库中对象的集合可通过过滤器缩小查询范围具有惰性执行特性(...对象,查询数据库b.author = some_body # 设置关联对象b.save() # 保存更改使用 select_related() 预加载关联对象,避免额外查询b = Book.objects.select_related...,字典的键为字段名,值为字段对应的数据返回一个包含元组的查询集,元组中的元素依次对应指定字段的值 内存占用 相对较高,因为字典需要存储键值对信息 通常更节省内存...,元组是更轻量的数据结构,无需存储字段名 使用场景 适合需要通过字段名访问字段值的场景,例如需要明确知道每个值对应的字段时适合仅需要获取字段值的场景,例如只需批量获取某个或某几个字段的具体数据时...关注不迷路~
select 列 1, 列 2 from xxx 返回值: QuerySet 返回查询结果容器,容器内存字典,每个字典代表一条数据, 格式为: {‘列 1’: 值 1, ‘列 2’: 值 2} 示例:...返回值: QuerySet 容器对象,内部存放 元组 会将查询出来的数据封装到元组中,再封装到查询集合 QuerySet 中 示例: from bookstore.models import Book...属性 的方式修改数据 保存 通过 对象.save () 保存数据 如: from bookstore.models import Book abook = Book.objects.get(id=10)...作用: 通常是对数据库中的字段值在不获取的情况下进行操作 用于类属性 (字段) 之间的比较。...list_editable 设置为模型上的字段名称列表,这将允许在更改列表页面上进行编辑。
Django支持所有常见的数据库关系:多对一,多对多和一对一。 激活模型 上面那段简短的模型代码给了Django很多信息。...,已经对模型做了一些更改(在这个例子中,你创建了一个新的模型)并且会将这些更改存储为迁移文件。...Django: >>> import django >>> django.setup() 如果以上命令引发了一个AttributeError,可能是你使用了一个和本教程不匹配的Django版本。...在页面的底部,则是一些可选项按钮: Save —— 保存更改,并返回当前类型对象的变更列表界面; Save and add another:保存当前修改,并加载一个新的空白的当前类型对象的表单...; Save and continue editing:保存当前修改,并重新加载该对象的编辑页面; delete:弹出一个删除确认页面 如果“Date published”字段的值和你在前面教程创建它的时候不一致
目录 Making queries 进行查询 创建一个对象(一条数据记录) 保存修改的表对象 保存外键字段或多对多字段(ForeignKey or ManyToManyField fields) Retrieving....save() 方法( .save() 没有返回值) 保存修改的表对象 想要保存一个已经改动过的对象,调用 .save() 方法即可(更新一条记录) 下面是一个 Blog 表模型类的实例化对象...保存外键字段或多对多字段(ForeignKey or ManyToManyField fields) 外键字段 ForeignKey 更新一个外键字段的写法和普通字段的完全一致,只需要将正确类型的对象分配给相关字段即可...新创建的 QuerySet 的缓存(cache)是空的,QuerySet 第一次取值执行(evaluatad)的时候进行数据库查询操作,Django 会将查询结果保存到 QuerySet 的 cache...queryset]) # 重用上一次查询出来的结果(cache) When QuerySets are not cached 不会保存 cache 缓存的情况 QuerySet 也不总是会缓存他的查询结果
存储组件,默认django.core.files.storage.FileSystemStorage width_field=None, 上传图片的高度保存的数据库字段名(字符串)...author1.name="jobs"#修改作者对象的名字 author1.save()#把更改写入数据库 3.2使用update方法直接设置对就的属性 Publish.objects.filter...表达式可以是简单的值、对模型(或任何关联模型)上的字段的引用或者聚合表达式(平均值、总和等)。 ..."content1"的记录(不区分大小写) table1.objects.filter(id__range=[1,4])#获取id在1到4(不包含4)之间的的记录 b、双下划线(__)之多表条件查询...Q查询 F查询专门取对象中某列值的操作,F的作用:用来批量修改数据的 #导入F from django.db.models import F #把table1表中的num列中的每一个值在的基础上加10
ORM单表操作 Django 测试环境搭建 注意pycharm链接数据库都需要提前下载对应的驱动,自带的sqlite3对日期格式数据不敏感,如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3...") values 查询字段 返回的是 QuerySet 类型数据,类似于 list,里面不是模型类的对象,而是一个可迭代的字典序列,字典里的键是字段,值是数据 def book(request...对象.delete() 返回值:元组,第一个元素为受影响的行数 book_obj=models.Book.objects.filter(pk=8).first().delete() 方式二:使用 QuerySet...也就是想要删除所有数据,不能不写 all; ORM 修改数据 方式一: 模型类的对象.属性 = 更改的属性值 模型类的对象.save() def book(request): book_obj...类型数据.update(字段名=更改的数据)(推荐) 返回值:整数,受影响的行数 def book(request): book_obj = models.Book.objects.filter
返回值:QuerySet,存放模型实例 exclude(条件) 语法同上 等价于 WHERE NOT 作用:返回不包含此条件的全部数据集 电商取非可以用该语句 get(条件)...查(get())->改:通过对象.属性的方式更改->保存:对象.save() 2.批量更新数据 直接调用QuerySet的update(属性=值实现批量修改) 针对QuerySet来做更改 删除操作...) 作用:通常对数据库字段值在不获取的情况下进行操作,用于类属性之间的比较 F(‘列名’) 对数据库字段值在不获取的情况下进行操作: 例:需求:将Book表中所有的market_price全部自增...Cookies 保存在客户端浏览器上的存储空间 特点: cookies在浏览器是以键值对的形式进行存储的,键和值都是以ASCII码的形式存储的 存储的数据带有生命周期 cookies的数据是按照域隔离的...保存session的值到服务器: request.session[‘KEY’] = VALUE 获取session的值 value = request.session[‘KEY’] value
(出于性能考虑,这些文件并不保存到数据库.) 定义MEDIA_URL 作为该目录的公共 URL. 要确保该目录对 WEB服务器用户帐号是可写的....默认值是 False. (1)blank 如果为True,该字段允许不填。默认为False。 要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。...) order_by(*field): queryset类型的数据来调用,对查询结果排序,默认是按照id来升序排列的,返回值还是queryset类型...,按照id进行升序 reverse(): queryset类型的数据来调用,对查询结果反向排序,返回值还是queryset类型 count...四、删除表纪录 delete()方法的调用者可以是一个model对象,也可以是一个queryset集合。 删除方法就是 delete()。它运行时立即删除对象而不返回任何值。
聚合的产生来源于django数据库查询,通常我们使用django查询来完成增删查改,但是有时候需要更复杂的方法才能完成对数据的提取、筛选、更改,所以需要一组对象聚合来完成这种操作。...(括号里面有参数),后两者是不返回查询集的方法 。...2.django提供了两种生成聚合的方法 1)从整个查询集生成统计值,主要用法:aggregate(*args, **kwargs) aggregate()是QuerySet 的一个终止子句,也就是说...aggregate返回一个字典,包含根据QuerySet 计算得到的聚合值(平均数、和等等)。...每本书和作者是多对多的关系。我们想要汇总QuerySet.中每本书里的这种关系。逐个对象的汇总结果可以由annotate()子句生成。
中带的migrations数据表中更改数据库记录 字段 常用的字段 自增长字段 models.AutoField() models.BigAutoField() 二进制数据 models.BinaryField...SET(value 或者 函数返回值):设置给定值。这个不是SQL标准的一部分,完全由Django处理。 DO_NOTHING:SQL等价物:NO ACTION。...指定模型属于哪个应用(如果在settings里面已经注册过应用的话,就不用写这个字段了) db_tablespace 定义数据库表空间的名字 Django 数据表操作 更改数据表 删除数据库表步骤...save方法 自己定义一个脚本批量导入数据 fixtures Django serialization -> model 保存 python3 manage.py dumpdata > data.json...() 不返回QuerySet 的 API 获取对象 get(),get_or_create(),first(),last(),latest(),earliest(),in_bulk() 创建对象 create
django中配置mysql数据库 查询queryset时如果需要选取查询集中的某个子集的字段时, 应该用切片,或者first 选择某个子集对象,这样才能够使用到 子集的字段,直接queryset后选择字段会直接报错...– 可以为空的布尔值 CharField – 字符串类型 必须提供max_length参数,字符长度 TextField – 文本类型 EmailField – 一个带有检查...从数据库中查询出来的结果一般是一个QuerySet集合。...列表里的元素是字典,而不是queryset对象列表。...['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' # 引入django的配置文件 import django django.setup()
,默认的foo_id参数返回的字典中将有一个叫做foo 的键,因为这是保存实际值的那个隐藏的模型属性的名称。...如果不传递任何值给values_list(),它将返回模型中的所有字段,以在模型中定义的顺序。 常见的情况是获取某个模型实例的特定字段值。...Entry.objects.defer("body").only("headline", "body") 当对具有延迟字段的实例调用save()时,仅保存加载的字段。...在Django1.11在defaults中增加了对可调用值的支持。...在Django1.11在defaults中增加了对可调用值的支持。
如果我们想要更改数据库,需要修改如下: ?...(**kwargs): 它包含了与所给筛选条件不匹配的对象 # order_by(*field): 对查询结果排序 # reverse():...这被称为执行 (evaluation).这些model会保存在queryset内置的cache中,这样如果你再次遍历这个queryset, 你不需要重复运行通用的查询。...聚合查询和分组查询 aggregate(*args,**kwargs): 通过对QuerySet进行计算,返回一个聚合值的字典。...此时Django为我们提供了F和Q查询: # F 使用查询条件的值,专门取对象中某列值的操作 # from django.db.models import F # models.Tb1
base.py 保存视图的抽象类,TemplateView和RedirectView,及工具类TemplateResponseMixin的代码; create_update.py 基于函数的通用视图;...MultipleObjectMixin 最主要的核心工具类,主要的算法和接口全部都在这个工具类中实现。 ? 属性 allow_empty 默认值True。...queryset 产生数据的queryset实例或"类queryset"数据列表。 model 关联的模型类。 paginated_by 分页的每页数据项数。默认不起用分页。...contextobjectname 保存到context中的对象名称。默认是$(model)_list。 paginator_class 默认值Paginator,分页处理器。...方法 get_queryset 获取用于数据显示的列表对象。可以是类queryset对象。 queryset属性。未提供queryset属性时,返回model的默认管理器。
,此时需要删除一些字段,但是我们又需要用到这些字段的值时,可以用pop,即达到了删除的效果,也可以拿到对应的删除对象,保存下来进行其他操作 关键点:book_obj.authors是什么? ... exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet...2.aggregate(*args,**kwargs):通过对QuerySet进行计算,返回一个聚合值的字典,aggregate()中每个参数都可以指定一个包含在字典中的返回值。...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。 ?...它运行时立即删除对象而不返回任何值。例如: ? 1 e.delete() 你也可以一次性删除多个对象。
每个字段通过 Field 类的一个实例表示 —— 例如字符字段 CharField 和日期字段 DateTimeField 。这种方法告诉 Django,每个字段中保存着什么类型的数据。...当我们在 model.py 对这两个模型类修改完成之后,我们需要通知数据库:“我模型已经修改了,你数据库也要更新呀”。 只需要执行上步的两行命令即可 ?...Django 会对 models.py 进行检测,自动发现需要更改的,应用到数据库中去。 1)创建对象 打开 python 终端,利用命令行来创建一个对象。 ?...3)使用 QuerySet API 查询数据 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet。而一旦我们建立好数据模型,Django 会自动为我们生成一套数据库抽象的API。...我们虽然对 Django 已经有大概的认识,仅仅了解些皮毛,但是还需要深入学习,掌握其精髓。后续我会学习然后分享 Django 一些精髓用法。 作者:猴哥,公众号:极客猴。
filter获取到的是一个queryset对象,类似于一个列表,如果对象为空时,就如同一个空列表;get获取到的是对象本身,如果对象不存在会报错,所以不推荐使用。...1.2.6values() values()获取数据对象中指定的字段的值,可以有多个,这里以queryset对象列表套字典的形式返回。...是出版社表的表名 更改一条记录 方式一:直接更改 models.Book.objects.filter(pk=5).update(publisher_id=4) 方式二:传虚拟字段和数据对象 publisher_obj...如果传入的对象或者数字是表中根本不存在的,不会报错,只是不执行删除语句而已。...+_set的情况:一对多,多对多;一对一的情况不需要加_set,因为两张表是一一对应的关系。
聚合函数 这里的聚合函数和SQL里的聚合函数对应,在使用前需要先进行模块的导入: from django.db.models import Max,Min,Sum,Count,Avg 常用的聚合函数有求最大值...(没有提交数据时)可以如果我们的操作有错误,可以执行回滚指令,撤销前面的操作(这里的撤销是撤销前面的所有),事务的原子性其实就是我们起一个事务对多张表进行数据操作时,要么这多张表同时被修改成功,要么都不被修改...(Field) - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 FilePathField(Field) - 字符串,...width_field=None, 上传图片的高度保存的数据库字段名(字符串) height_field=None 上传图片的宽度保存的数据库字段名...TimeField': 'time', 'UUIDField': 'char(32)', ORM字段与MySQL字段对应关系 自定义char字段 自定义字段可以使用下面的方法,其实我们也只是更改一下字段的数据长度