首页
学习
活动
专区
工具
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 model save方法更改字段依然进行了保存

obj = Obj.objects.get(id=1) print obj.name #此时name假定为'abc' def handler(oid): obj = Obj.objects.get...save()保存时,虽然没有更改其它字段,但依然会将内存中,再次存入数据库,子函数和其它进程更改会被覆盖。...(有些信号会被多次发送,但是我们通常只是其中一些信号子集感兴趣,下面将演示针对具体某个模型pre_save以及post_save来发送信号) ?...& django.db.models.signals.post_delete Sent before or after a model’s delete() method or queryset’s...和save运行逻辑一样,pre信号先触发,post后触发 以上这篇利用django model save方法更改字段依然进行了保存就是小编分享给大家全部内容了,希望能给大家一个参考。

1.7K10

PythonDjango框架实现数据库查询(返回QuerySet方法)

~ 二、介绍返回QuerySet方法: 方法名 介绍 get() 获取单个对象 create() 创建对象 bulk_create() 批量创建对象 get_or_create() 查询对象,若没有找到则创建新对象...2.update()方法返回受影响行数。 ​ 3.update()方法还可以防止在加载对象和调用save()之间短时间内数据库中某些内容可能发生更改竞争条件。...defaults是一个由 (field, value)组成字典,用于更新对象。defaults中可以是可调用对象。...(平均值、总和等),通过QuerySet进行计算,每个参数指定返回字典中将要包含。...以上这篇PythonDjango框架实现数据库查询(返回QuerySet方法)就是小编分享给大家全部内容了,希望能给大家一个参考。

2.5K30

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.3K20

37.Django1.11.6文档

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

24.3K80

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

4K40

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

7K10

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.批量更新数据 直接调用QuerySetupdate(属性=实现批量修改) 针对QuerySet来做更改 删除操作...) 作用:通常对数据库字段获取情况下进行操作,用于类属性之间比较 F(‘列名’) 对数据库字段获取情况下进行操作: 例:需求:将Book表中所有的market_price全部自增...Cookies 保存在客户端浏览器上存储空间 特点: cookies在浏览器是以键值形式进行存储,键和都是以ASCII码形式存储 存储数据带有生命周期 cookies数据是按照域隔离...保存session到服务器: request.session[‘KEY’] = VALUE 获取session value = request.session[‘KEY’] value

9.3K40

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()。它运行时立即删除对象而返回任何

2.9K10

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

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

1.4K20

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源码学习-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学习之旅(六)

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

1.4K30

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
领券