首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django: Queryset不保存对值的更改?

Django是一个基于Python的开源Web应用框架,它提供了一套完整的开发工具和库,用于快速构建高效、安全和可扩展的Web应用程序。

在Django中,Queryset是用于查询和操作数据库的对象集合。它是Django ORM(对象关系映射)的核心组件之一,可以方便地进行数据库操作。

对于Queryset对象的更改,需要注意以下几点:

  1. Queryset是惰性加载的:当我们对Queryset进行筛选、排序、切片等操作时,并不会立即执行数据库查询,而是在需要使用Queryset结果时才会触发实际的数据库查询。这种惰性加载的特性可以提高性能和效率。
  2. Queryset是不可变的:一旦创建了Queryset对象,它的内容是不可变的。这意味着对Queryset进行的任何更改操作都不会直接保存到数据库中,而是返回一个新的Queryset对象。

如果我们希望保存对Queryset的更改,需要使用以下方法之一:

  1. 使用update()方法:update()方法可以直接在数据库中执行更新操作,而不需要获取和保存每个对象。例如,假设我们有一个名为"Book"的模型,我们可以使用以下代码将所有价格大于100的书籍的价格增加10:
代码语言:txt
复制
from myapp.models import Book

Book.objects.filter(price__gt=100).update(price=F('price')+10)
  1. 逐个保存对象:如果我们需要对每个对象进行更改并保存到数据库中,可以使用以下方法:
代码语言:txt
复制
books = Book.objects.filter(price__gt=100)
for book in books:
    book.price += 10
    book.save()

需要注意的是,逐个保存对象会导致多次数据库查询和更新操作,可能会影响性能。

综上所述,Queryset对象的更改不会直接保存到数据库中,而是返回一个新的Queryset对象。如果需要保存更改,可以使用update()方法或逐个保存对象。更多关于Django的Queryset操作和使用方法,可以参考腾讯云的Django产品文档:Django产品文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

django 1.8 官方文档翻译: 2-2-1 执行查询

假设一个Blog的实例b5已经被保存在数据库中,这个例子更改了它的名字,并且在数据库中更新它的记录: >>> b5.name = 'New name' >>> b5.save() 上面的代码在背后执行了...查询集是延迟的 QuerySets 是惰性的 – 创建 QuerySet 的动作不涉及任何数据库操作。...QuerySet 第一次运行时,会执行数据库查询,接下来 Django 就在 QuerySet 的缓存中保存查询的结果,并根据请求返回这些结果(比如,后面再次调用这个 QuerySet 的时候)。...它运行时立即删除对象而不返回任何值。例如: e.delete() 你也可以一次性删除多个对象。每个 QuerySet 都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象。...1.0 中新增的: 请查看版本文档 有时你想对 QuerySet 中的所有对象,一次更新某个字段的值。

4.4K20

37.Django1.11.6文档

首次对QuerySet进行求值 —— 同时发生数据库查询 ——Django 将保存查询的结果到QuerySet的缓存中并返回明确请求的结果(例如,如果正在迭代QuerySet,则返回下一个结果)。...使用commit=False 的另外一个副作用是在模型具有多对多关系的时候。 如果模型具有多对多关系而且当你保存表单时指定commit=False,Django 不会立即为多对多关系保存表单数据。 ...在你手工保存由表单生成的实例之后,你可以调用save_m2m() 来保存多对多的表单数据。 ...如果给定实例的数据在绑定数据中没有更改,那么实例将不会保存到数据库,并且不会包含在返回值中(在上面的示例中为instances)。...如果您想在自己的管理JavaScript中使用jQuery而不包含第二个副本,则可以使用更改列表上的django.jQuery对象和添加/编辑视图。

24.4K80
  • 【Django】 开发:数据库操作和后台管理

    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 设置为模型上的字段名称列表,这将允许在更改列表页面上进行编辑。

    4.1K40

    Django 1.10中文文档-第一个应用Part2-模型和管理站点

    Django支持所有常见的数据库关系:多对一,多对多和一对一。 激活模型 上面那段简短的模型代码给了Django很多信息。...,已经对模型做了一些更改(在这个例子中,你创建了一个新的模型)并且会将这些更改存储为迁移文件。...Django: >>> import django >>> django.setup() 如果以上命令引发了一个AttributeError,可能是你使用了一个和本教程不匹配的Django版本。...在页面的底部,则是一些可选项按钮: Save —— 保存更改,并返回当前类型对象的变更列表界面; Save and add another:保存当前修改,并加载一个新的空白的当前类型对象的表单...; Save and continue editing:保存当前修改,并重新加载该对象的编辑页面; delete:弹出一个删除确认页面 如果“Date published”字段的值和你在前面教程创建它的时候不一致

    2.3K60

    Django-官网查询部分翻译(1.11版本文档)-QuerySet-字段查找-06

    目录 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 也不总是会缓存他的查询结果

    2.9K20

    Django之Model操作数据库详解

    存储组件,默认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

    7.1K10

    Django ORM 单表操作

    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

    1.3K20

    后端框架学习-Django

    返回值: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

    9.6K40

    05.Django基础五之django模型层(一)单表操作

    (出于性能考虑,这些文件并不保存到数据库.) 定义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()。它运行时立即删除对象而不返回任何值。

    3K10

    Django 聚合与查询集API实现侧边栏

    聚合的产生来源于django数据库查询,通常我们使用django查询来完成增删查改,但是有时候需要更复杂的方法才能完成对数据的提取、筛选、更改,所以需要一组对象聚合来完成这种操作。...(括号里面有参数),后两者是不返回查询集的方法 。...2.django提供了两种生成聚合的方法 1)从整个查询集生成统计值,主要用法:aggregate(*args, **kwargs) aggregate()是QuerySet 的一个终止子句,也就是说...aggregate返回一个字典,包含根据QuerySet 计算得到的聚合值(平均数、和等等)。...每本书和作者是多对多的关系。我们想要汇总QuerySet.中每本书里的这种关系。逐个对象的汇总结果可以由annotate()子句生成。

    1.5K20

    Django ORM 知识概要

    中带的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

    1.8K20

    Django——model基础

    ,此时需要删除一些字段,但是我们又需要用到这些字段的值时,可以用pop,即达到了删除的效果,也可以拿到对应的删除对象,保存下来进行其他操作 关键点:book_obj.authors是什么?  ... exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象   values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet...2.aggregate(*args,**kwargs):通过对QuerySet进行计算,返回一个聚合值的字典,aggregate()中每个参数都可以指定一个包含在字典中的返回值。...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。 ?...它运行时立即删除对象而不返回任何值。例如: ? 1 e.delete() 你也可以一次性删除多个对象。

    1.1K100

    Django学习之旅(六)

    每个字段通过 Field 类的一个实例表示 —— 例如字符字段 CharField 和日期字段 DateTimeField 。这种方法告诉 Django,每个字段中保存着什么类型的数据。...当我们在 model.py 对这两个模型类修改完成之后,我们需要通知数据库:“我模型已经修改了,你数据库也要更新呀”。 只需要执行上步的两行命令即可 ?...Django 会对 models.py 进行检测,自动发现需要更改的,应用到数据库中去。 1)创建对象 打开 python 终端,利用命令行来创建一个对象。 ?...3)使用 QuerySet API 查询数据 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet。而一旦我们建立好数据模型,Django 会自动为我们生成一套数据库抽象的API。...我们虽然对 Django 已经有大概的认识,仅仅了解些皮毛,但是还需要深入学习,掌握其精髓。后续我会学习然后分享 Django 一些精髓用法。 作者:猴哥,公众号:极客猴。

    1.4K30

    Django源码学习-11-base.py

    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的默认管理器。

    1.2K30

    django orm(2)

    聚合函数 这里的聚合函数和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字段 自定义字段可以使用下面的方法,其实我们也只是更改一下字段的数据长度

    1.2K21
    领券