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

Django数据库操作之save与update使用

例如数据更新操作,对单条记录,可以使用save或者是update两种方式 Django工程下settings.py下将log设置为DEBUG,即可查看save和update分别执行了哪些SQL语句...,发现更新时候把Example字段都SET赋值一次 使用update Example.objects.filter(id=481).update(total_calories = 10)...使用Django数据模型操作数据库时,了解这些底层SQL操作很有必要。...我们创建了一个叫文章Article模型,里面包含title, body和作者author等多个字段,其中author字段非空null=False。...当你同时满足下面两个条件时,你需要使用此方法。如果你直接使用save()form_valid()方法,是可以直接存储多对多(m2m)关系,不需要用save_m2m。

2.7K10

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

django(ORM),数据库与 python 对象映射关系十分形象,一个表模型类(class)即代表一张表,实例化出一个对象即代表一条数据记录 创建一个对象(一条数据记录) django...,下面的语句更新一个 Entry 模型类实例化出来 entry 对象 blog 属性(请确保下面用到 Entry 和 Blog 实例化对象已经存在在数据库,这样我们语句才能将它们查出来)...记住这个 使用 .get() 和 .filter()[0] 有点不一样,如果没有满足条件查询结果, .get() 会报一个 DoesNotExist 错,这个报错是执行模型一个属性,所以,在上面的代码...同样,如果有多个对象同时满足这个条件,那么 django 将会报错:MultipleObjectsReturned,这个报错也是执行模型一个属性。...,里面包含对象都是满足你给出查询参数(条件多个查询(关键字)参数以逗号间隔,对应到 SQL 语句中是 AND 连接,如果你想执行更多复杂操作(比如 OR )可以使用 Q 对象 Q对象 使用

2.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

Django】 开发:数据库操作和后台管理

F F('列名') 说明: 一个 F () 对象代表了一个 model 字段值 F 对象通常是对数据库字段不加载到内存情况下直接在数据库服务器端进行操作 示例 1 更新 Book...需要先导入再使用 from django.db.models import Q 作用 条件中用来实现除 and (&) 以外 or (|) not (~) 操作 运算符: & 与操作 | 操作...='机械工业出版社')) 原生数据库操作方法 使用MyModel.objects.raw()进行 数据库查询操作查询 django,可以使用模型管理器raw方法来执行select语句进行数据查询...游标cursor对数据库进行 增删改查 操作 Django 跨过模型类直接操作数据库 使用步骤: 导入 cursor 所在Django 游标 cursor 定义 django.db.connection...(设置完成后需要立马更新同步数据库) 2. verbose_name = '单数名' - 给模型对象一个易于理解名称(单数),用于显示/admin管理界面

4K40

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

字段筛选条件 字段筛选条件就是 SQL 语句 WHERE 从句。就是 Django QuerySet filter(), exclude() 和 get() 方法关键字参数。...如果我们要对两个字段值做比较,那该怎么做呢? Django 提供 F() 来做这样比较。F() 实例可以查询引用字段,来比较同一个 model 实例两个不同字段值。...Django 1.0 中新增: 请查看版本文档 有时你想对 QuerySet 所有对象,一次更新某个字段值。...调用 update 时可以使用 F() 对象 来把某个字段更新为另一个字段值。...) 但是,与 F() 对象查询时所不同是,filter 和 exclude子句中,你不能在 F() 对象引入关联关系(NO-Join),你只能引用当前 model 更新字段

4.3K20

Q查询和F查询

Django 遇到 F() 实例时,它会覆盖标准 Python 运算符来创建一个封装 SQL 表达式;本例,它指示数据库递增由 reporter.stories_filed 表示数据库字段...避免竞争 F() 另一个有用好处是,让数据库——而不是 Python——更新一个字段值,避免了 竞争条件。...如果数据库负责更新字段,那么这个过程就比较稳健:它只会在执行 save() update() 时,根据数据库字段值来更新字段,而不是根据检索实例时值来更新。...注意:F() 赋值 Model.save() 之后持续存在 F() 分配给模型字段对象保存模型实例后会持续存在,并将应用于每个 save()。...根据字段值来进行查询 F() QuerySet 过滤器也非常有用,它们可以根据对象字段值而不是 Python 值标准来过滤一组对象。F()能将模型字段值与同一模型另一字段做比较。

1.3K10

Django框架学习(三)

Django: 1、设置模板目录 工程创建模板目录templates。...父模板 如果发现在多个模板某些内容相同,那就应该把这段内容定义到父模板。 标签block:用于父模板预留区域,留给子模板填充差异性内容,名字不能相同。...b)Django模板变量不能直接进行算术运算 2、模板控制语句条件判断和for循环 a)条件判断:Django模板进行条件判断时候,比较操作符两边必须有空格 b)for循环:Django模板...__tablename__ = "" 2)Django定义模型类 class 模型类名(models.Model): # 字段名 = models.字段类型(选项参数) #...字段类型 类型 说明 AutoField 自动增长IntegerField,通常不用指定,不指定时Django会自动创建属性名为id自动增长属性 BooleanField 布尔字段,值为TrueFalse

1.8K40

django入门:数据模型

社群,有想学习django同学可以公众号后台回复“django”,获取入群方式。...正文 上一部分我们介绍了《django环境和项目的搭建》,以及数据库配置,那这一部分我们介绍和数据库相关方面的知识 -- 模型 创建 django 模型 我们需要在 "blog" 应用下 models.py...文件添加 django 数据库模型模型类需要继承 models.Model 类,例如 from django.db import models class Category(models.Model...列 auto_now=(True/False) 自动创建---无论添加修改,都是当前操作时间, MySql 下存在过滤月份时候数据为空,解决方案参考 MySql 文档 Section...category = models.ForeignKey(Category) 表 Category 需要统计某个 category 下 post 数量, # 但是表 Category 没有 post_count

80410

一杯茶时间,上手 Django 框架开发

>Hello World Tom 条件语句 条件语句定义如下: {% if is_true %} It is true!...注意:整个条件语句必须以 {% endif %} 结束,并且 {% else %} 是可选。 循环语句 循环语句用来模板上展示任意长列表内容。...理解数据库迁移 数据库迁移是指将用 Django 定义模型转换成 SQL 代码(即迁移文件),并在数据库中进行建表操作(更新表)。看下面这张图就知道了: ?...4.开发中发现第 1 步定义模型不完善,更新数据模型5.跳转到第 2 步,反复循环 实现第一个数据模型 终于到了动手环节。...Django 还有很多很多高级玩法,例如数据模型高级查询、字段索引、更换数据库等等,模板继承机制、内部标签等等,还有视图中如何处理各类请求(POST、PUT等),我们会在后续更多教程逐一为大家讲解

1.4K21

Django学习笔记:QuerySet API

其实模型名字.objects是一个django.db.models.manager.Manager对象,而Manager这个类是一个“空壳”类,他本身是没有任何属性和方法。...默认情况下会把表中所有的字段全部都提取出来,可以使用values来进行指定,并且使用了values方法后,提取出QuerySet数据类型不是模型,而是values方法中指定字段和值形成字典:...update:执行更新操作,SQL底层走也是update命令。比如要将所有category为空articlearticle字段更新为默认分类。...所以更新完成后保存到数据库不会执行save方法,因此不会更新auto_now设置字段。 delete:删除所有满足条件数据。删除数据时候,要注意on_delete指定处理方式。...说明上面的QuerySet并没有真正执行。 以下情况下QuerySet会被转换为SQL语句执行: 迭代:遍历QuerySet对象时候,会首先先执行这个SQL语句,然后再把这个结果返回进行迭代。

60120

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

创建名为bookapp,book下models.py创建模型: from django.db import models # Create your models here....(4)unique 如果该值设置为 True, 这个数据字段整张表必须是唯一 (5)choices 由二元组组成一个可迭代对象(例如,列表元组),用来给字段提供选择项。...,我们接着往下看 具有auto_now属性字段更新 我们通常会给表添加三个默认字段 - 自增ID,这个django已经默认加了,就像上边建表语句,虽然只写了username和is_active两个字段...,django有一张django-migrations表,表记录了已经执行脚本,那么表没有的就是还没执行脚本,则 执行migrate时候就只执行表没有记录那些脚本。...有时执行 migrate 时候如果发现没有生成相应表,可以看看在 django-migrations表中看看 脚本是否已经执行了, 可以删除 django-migrations 表记录

2.9K10

后端框架学习-Django

/templates settings.pyTEMPLATE配置项 BACKEND:指定模板引擎 DIRS:模板搜索目录(可以是一个多个) APP_DIRS:是否应用templates文件夹搜索末班文件...名称+类名称小写 模型类-字段类型: BooleanField 数据库类型:tinyint(1) 编程语言中将使用TrueFalse来表示值 在数据库则使用01来表示具体值 Char...verbose_name:设置此字段admin界面上显示名称,可以中文化admin界面 好习惯:字段选项【添加更改】均要执行 模型类-Meta内部类 使用Meta类来给**模型(其实就是表属性)...(key)-获取缓存 key:缓存key 返回值,key对应值,没有则返回None 3.cache.add(key,value)-存储缓存,只key不存在时候生效 返回值:True...中间件以类形式体现 每个中间件负责一些特定功能 中间件方法 继承django.utils.deprecation.MiddlewareMixin类 中间件类须实现下列五个方法一个多个: process_request

9.3K40

django 1.8 官方文档翻译:2-5-9 条件表达式

条件表达式 New in Django 1.8. 条件表达式允许你在过滤器、注解、聚合和更新操作中使用 if ... elif ... else逻辑。...条件表达式为表每一行计算一系列条件,并且返回匹配到结果表达式。条件表达式也可以像其它 表达式一样混合和嵌套。...=0), then=1) Case class Case(*cases, **extra)[source] Case()表达式就像是Pythonif ... elif ... else语句。...如果没有条件为TRUE,表达式会返回提供default关键字参数。如果没有提供default参数,会使用Value(None)。...这就像Pythonif … elif … else语句一样。 高级查询 条件表达式可以用于注解、聚合、查找和更新。它们也可以和其它表达式混合和嵌套。这可以让你构造更强大条件查询。

35230

Django项目知识点(四)

QuerySet实例 就是从数据库根据自己要求拿数据 连数据都那不出来,写啥视图 所以在编写queryset必须用django shell 调试 modelDjango通过给Model增加一个objects...当我们需要对查询集(queryset)某些字段进行计算进行先分组再计算排序, 我们就需要使用aggregate和annotate方法了。...aggregate(Max('price')) {'price__max': Decimal('81.20')} annotate 先介绍F,annotate 必用F F介绍 -个F()对象表示一个模型字段注释值...这样就可以引用模型字段值并使用它们执行数据库操作,而无需实际将它们从数据库拉出到Python内存 说白了就是我从数据库拿东西,但是有些需要字段没有,要通过绑定外键appmodel拿。...newstitle字段,拿出来它叫news__title,我要给它换个名字叫news_title,这就是注释。

1.5K30

Django ORM模型:想说爱你不容易

Django数据模型建立过程很简单,就是继承django.db.modelsModel类,然后给它增加属性。每一个属性可以对应关系数据库一个字段。...这里max_length=10对应了限制条件: VARCHAR(10) (MySQL V4,代表了10个字节;MySQL V5,代表了10个字符。)...有一些限制条件Django提供,并没有数据库层面的对应物,比如blank。 (当blank参数为真时,对应字段可以为留为空白。) 基本模型设计上,Django ORM没有留什么坑。...需要注意是,Django ORM,只能通过ForeignKey来定义多对一关系,不能显示地定义一对多关系。但你可以使用模型对象*_set语法来反向调用多对一关系。...但如果需要构建复杂SQL语句,与其Django ORM里绕来绕去,还不如直接用原始SQL语句。这个是我最强烈一个感受。当然,Django ORM还是可用工具。

77020

Django ORM模型:想说爱你不容易

Django数据模型建立过程很简单,就是继承django.db.modelsModel类,然后给它增加属性。每一个属性可以对应关系数据库一个字段。...这里max_length=10对应了限制条件: VARCHAR(10) (MySQL V4,代表了10个字节;MySQL V5,代表了10个字符。)...有一些限制条件Django提供,并没有数据库层面的对应物,比如blank。 (当blank参数为真时,对应字段可以为留为空白。) 基本模型设计上,Django ORM没有留什么坑。...需要注意是,Django ORM,只能通过ForeignKey来定义多对一关系,不能显示地定义一对多关系。但你可以使用模型对象*_set语法来反向调用多对一关系。...但如果需要构建复杂SQL语句,与其Django ORM里绕来绕去,还不如直接用原始SQL语句。这个是我最强烈一个感受。当然,Django ORM还是可用工具。

62520

Django ORM模型:想说爱你不容易

Django数据模型建立过程很简单,就是继承django.db.modelsModel类,然后给它增加属性。每一个属性可以对应关系数据库一个字段。...这里max_length=10对应了限制条件: VARCHAR(10) (MySQL V4,代表了10个字节;MySQL V5,代表了10个字符。)...有一些限制条件Django提供,并没有数据库层面的对应物,比如blank。 (当blank参数为真时,对应字段可以为留为空白。) 基本模型设计上,Django ORM没有留什么坑。...需要注意是,Django ORM,只能通过ForeignKey来定义多对一关系,不能显示地定义一对多关系。但你可以使用模型对象*_set语法来反向调用多对一关系。...但如果需要构建复杂SQL语句,与其Django ORM里绕来绕去,还不如直接用原始SQL语句。这个是我最强烈一个感受。当然,Django ORM还是可用工具。

1.2K80

【Python全栈100天学习笔记】Day41 Django深入理解框架

MySQL创建数据库SQL语句如下所示: create database oa default charset utf8; Django框架本身有自带数据模型,我们稍后会用到这些模型,为此我们先做一次迁移操作...至此我们还没有看到之前创建模型类,需要在应用admin.py文件模型进行注册。 注册模型类。...语句并获取对应结果,这一点实际开发需要引起注意!...说明3:可以QuerySet上使用update()方法一次更新多个对象。...模型定义参考 字段字段名称限制 字段名不能是Python保留字,否则会导致语法错误 字段名不能有多个连续下划线,否则影响ORM查询操作 Django模型字段字段类 说明 AutoField

2.2K30

Django——model基础

(4)unique 如果该值设置为 True, 这个数据字段整张表必须是唯一 (5)choices 由二元组组成一个可迭代对象(例如,列表元组),用来给字段提供选择项。...更新多对多第三张表时,可以直接用以下方法 book_obj.authors.set(*[装有对象id列表]) 此操作包含了两步clear+add 有时候字段获取较多,但是需要更新表里没有那么多字段...如果我们要对两个字段值做比较,那该怎么做呢? Django 提供 F() 来做这样比较。F() 实例可以查询引用字段,来比较同一个 model 实例两个不同字段值。 ?...里面的条件可能有多个条件符合,比如name='alvin',可能有两个name='alvin'行数据)。...“插入和更新数据”小节,我们有提到模型save()方法,这个方法会更新一行里所有列。 而某些情况下,我们只需要更新行里某几列。

1.1K100

Django(19)QuerySet API

其实模型名字.objects是一个django.db.models.manager.Manager对象,而Manager这个类是一个“空壳”类,他本身是没有任何属性和方法。...默认情况下会把表中所有的字段全部都提取出来,可以使用values来进行指定,并且使用了values方法后,提取出QuerySet数据类型不是模型,而是values方法中指定字段和值形成字典:...如果在values没有传递任何参数,那么将会返回一个字典,字典包含这个模型中所有的属性。...update update:执行更新操作,SQL底层走也是update命令。比如要将所有category为空articlearticle字段更新为默认分类。...Django将QuerySet转换为SQL语句去执行五种情况 迭代:遍历QuerySet对象时候,会首先先执行这个SQL语句,然后再把这个结果返回进行迭代。

69810

Django学习-第十讲(上):QuerySet API 学习

其实模型名字.objects是一个django.db.models.manager.Manager对象,而Manager这个类是一个“空壳”类,他本身是没有任何属性和方法。...默认情况下会把表中所有的字段全部都提取出来,可以使用values来进行指定,并且使用了values方法后,提取出QuerySet数据类型不是模型,而是values方法中指定字段和值形成字典...>等 7.all:获取这个ORM模型QuerySet对象。 select_related:提取某个模型数据同时,也提前将相关联数据提取出来。...比如可以提前获取文章作者,但是不能通过作者获取这个作者文章,或者是通过某篇文章获取这个文章所有的标签 9.prefetch_related:这个方法和select_related非常类似,就是访问多个数据时候...所以更新完成后保存到数据库不会执行save方法,因此不会更新auto_now设置字段 14.切片操作:有时候我们查找数据,有可能只需要其中一部分 books = Book.objects.all

57320
领券