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

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

Django的数据模型的建立过程很简单,就是继承django.db.models的Model类,然后给它增加属性。每一个属性可以对应关系数据库的一个字段。...有一些限制条件是Django提供的,并没有数据库层面的对应物,比如blank。 (当blank参数为真,对应字段可以为留为空白。) 在基本的模型设计上,Django ORM没有留什么坑。...查询 Django ORM可以通过一些方法来实现。其中的很多方法返回的是Django自定义的QuerySet类的迭代器。Python看到迭代器时会懒惰求值,所以这些方法返回并不会真正进行数据库操作。...对于依赖具体数据的操作,QuerySet求值。比如遍历QuerySet,就会先执行数据库操作。用len()获得QuerySet长度,也会造成QuerySet估值。...此外QuerySet一些方法,比get()、count()、earlist()、exists()等,都会对QuerySet进行求值

62320

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

Django的数据模型的建立过程很简单,就是继承django.db.models的Model类,然后给它增加属性。每一个属性可以对应关系数据库的一个字段。...有一些限制条件是Django提供的,并没有数据库层面的对应物,比如blank。 (当blank参数为真,对应字段可以为留为空白。) 在基本的模型设计上,Django ORM没有留什么坑。...查询 Django ORM可以通过一些方法来实现。其中的很多方法返回的是Django自定义的QuerySet类的迭代器。Python看到迭代器时会懒惰求值,所以这些方法返回并不会真正进行数据库操作。...对于依赖具体数据的操作,QuerySet求值。比如遍历QuerySet,就会先执行数据库操作。用len()获得QuerySet长度,也会造成QuerySet估值。...此外QuerySet一些方法,比get()、count()、earlist()、exists()等,都会对QuerySet进行求值

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

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

Django的数据模型的建立过程很简单,就是继承django.db.models的Model类,然后给它增加属性。每一个属性可以对应关系数据库的一个字段。...有一些限制条件是Django提供的,并没有数据库层面的对应物,比如blank。 (当blank参数为真,对应字段可以为留为空白。) 在基本的模型设计上,Django ORM没有留什么坑。...查询 Django ORM可以通过一些方法来实现。其中的很多方法返回的是Django自定义的QuerySet类的迭代器。Python看到迭代器时会懒惰求值,所以这些方法返回并不会真正进行数据库操作。...对于依赖具体数据的操作,QuerySet求值。比如遍历QuerySet,就会先执行数据库操作。用len()获得QuerySet长度,也会造成QuerySet估值。...此外QuerySet一些方法,比get()、count()、earlist()、exists()等,都会对QuerySet进行求值

76820

Django】聚合在Django的详细解析以及运用在企业级项目里的方法

聚合 Django数据库抽象API描述了使用Django查询来添加、删除、查询和修改单个对象的方法。然而,有时需要根据一组对象聚合您想要获得的值。...第一种方法是整个QuerySet生成摘要值。例如,想计算所有在售图书的平均价格。Django的查询语法提供了一种描述所有藏书的方法。 传递给聚合()的参数描述了要计算的聚合值。...在此示例,将计算Book模型上价格字段的平均值。可以在QuerySet引用中找到可用聚合函数的列表。 Aggregate()是QuerySet的一个结束语句。...在聚合函数中指定聚合字段Django允许您在筛选相关字段使用相同的双下划线符号。Django将处理需要检索和聚合相关值的任何表连接。...(num_authors=Count('authors')) annotate()和filter()子句的顺序¶ 在开发涉及annotate()和filter()子句的复杂查询特别注意应用于QuerySet

2K40

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

字段属性primary_key用于设置主键,max_length用来设置字段的最大长度,db_column用来设置数据库字段对应的列,verbose_name则设置了Django后台管理系统字段显示的名称...说明2:查询多个对象的时候返回的是QuerySet对象,QuerySet使用了惰性查询,即在创建QuerySet对象的过程不涉及任何数据库活动,等真正用到对象求值QuerySet)才向数据库发送SQL...删除 >>> Dept.objects.get(pk=40).delete() (1, {'hrs.Dept': 1}) Django模型最佳实践 正确的为模型和关系字段命名。...通用字段属性 选项 说明 null 数据库对应的字段是否允许为NULL,默认为False blank 后台模型管理验证数据,是否允许为NULL,默认为False choices 设定字段的选项,各元组的第一个值是设置在模型上的值...on_delete:外键关联的对象被删除对应的动作,可取的值包括django.db.models定义的: CASCADE:级联删除

2.2K30

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

本文Django官方文档总结而来,将聚合的主要用法和查询集的常见方法做一归纳。 聚合 1....2.django提供了两种生成聚合的方法 1)整个查询集生成统计值,主要用法:aggregate(*args, **kwargs) aggregate()是QuerySet 的一个终止子句,也就是说...2, authors为Book模型字段名,count为字段查询,所以用双下划线连接 2 # Interrogate the second object in the queryset >>> q[1...发现aggregate 和 annotate用法的区别了吗,再次举例如下(在聚合函数中指定聚合字段Django 允许你使用同样的 双下划线 表示关联关系,): >>> from django.db.models...在你对查询集做求值之前,不会发生任何实际的数据库操作。

1.4K20

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

CharField 要求必须有一个参数 maxlength, 用于数据库层和Django校验层限制该字段所允许的最大字符数. IntegerField #用于保存一个整数....有时在执行 migrate 的时候如果发现没有生成相应的表,可以看看在 django-migrations表中看看 脚本是否已经执行了, 可以删除 django-migrations 表的记录...__version__)     注释掉 就OK了。     ...类型的数据来调用,返回结果剔除重复纪录 queryset方法大全: #################################################################...,在 Django 删除对象,会模仿 SQL 约束 ON DELETE CASCADE 的行为,换句话说,删除一个对象也会删除与它相关联的外键对象。

2.9K10

django_2

,然后再添加表的数据, 删除数据的时候先删除表的数据,再删除主表的数据。...(QuerySet) django的filter结果 ]> 是一个列表 def getDname(rquest): emp = Emp.objects.filter...,可以实现对字段的约束 ·在字段对象通过关键字参数指定 ·null ·如果为True,Django 将空值以NULL 存储到数据库,默认值是 False ·blank...'> 得到的是查询集合,queryset没有save属性,获取所有数据 概述 ·django根据属性的类型确定以下信息 ·当前选择的数据库支持字段的类型 ·渲染管理表单使用的默认...·在字段对象通过关键字参数指定 ·null ·如果为True,Django 将空值以NULL 存储到数据库,默认值是 False ·blank ·如果为True,则该字段允许为空白

3.6K30

Django ORM 知识概要

Django带的migrations数据表更改数据库记录 字段 常用的字段 自增长字段 models.AutoField() models.BigAutoField() 二进制数据 models.BinaryField...=value value的值 CASCADE:删除引用的对象,也删除引用它的对象 PROTECT:禁止删除引用的对象。...只有当字段设置了default参数才能使用 SQL等价物:SET DEFAULT。 SET(value 或者 函数返回值):设置给定值。这个不是SQL标准的一部分,完全由Django处理。...,就不用写这个字段了) db_tablespace 定义数据库表空间的名字 Django 数据表操作 更改数据表 删除数据库表步骤 删除对应的模型类代码 删除migrationd文件夹下面的模型类...删除Django的migrations表对应的记录 删除数据库表 导入数据 Django shell 导入数据 引入模型 调用模型对象的save方法 自己定义一个脚本批量导入数据 fixtures

1.8K20

Django学习笔记之Queryset详解

manager类,而不是自定义QuerySet类,一般的我们没有自定义QuerySet类的必要;django.db.models模块的Model类,我们定义表的model,就是继承它,它的功能很强大...,只有当用到这个QuerySet,才会查询数据库求值。...一般而言,当对一个没有求值QuerySet进行的运算,返回的是QuerySet、ValuesQuerySet、ValuesListQuerySet、Model实例,一般不会立即查询数据库;反之,当返回的不是这些类型...先filter,然后对得到的QuerySet执行delete()方法就行了,它会同时删除关联它的那些记录,比如我删除记录表1的A记录,表2的B记录中有A的外键,那同时也会删除B记录,那ManyToMany...对于ManyToMany,删除其中一方的记录,会同时删除中间表的记录,即删除双方的关联关系。

2.7K30

07.Django学习之model进阶

你可以将过滤器保持一整天,直到查询集 需要求值Django 才会真正运行这个查询。...当你确实需要结果,查询集 通过访问数据库来求值。 关于求值发生的准确时间,参见何时计算查询集。   缓存机制 每个查询集都包含一个缓存来最小化对数据库的访问。...的缓存并返回明确请求的结果(例如,如果正在迭代查询集,则返回下一个结果)。接下来对该查询集 的求值将重用缓存的结果。 牢记这个缓存行为,因为对查询集使用不当的话,它会坑你的。...Uses cache >>> print queryset[5] # Uses cache 下面是一些其它例子,它们会使得全部的查询集被求值并填充到缓存: >>> [entry for entry in...如果要访问指定深度外的字段Django会再次进行SQL查询。 也接受无参数的调用,Django会尽可能深的递归查询所有的字段。但注意有Django递归的限制和性能的浪费。

2K30

django 1.8 官方文档翻译: 2-5-4 聚合 (初稿)

第一种方法是整个查询集生成统计值。比如,你想要计算所有在售书的平均价钱。Django的查询语法提供了一种方式描述所有图书的集合。...__min': Decimal('12.99')} 为查询集的每一项生成聚合 生成汇总值的第二种方法,是为QuerySet每一个对象都生成一个独立的汇总值。...有任何疑问的话,检查 SQL query! 要想弄清楚你的查询到底发生了什么,可以考虑检查你QuerySet的 query 属性。...在聚合函式中指定聚合字段Django 允许你使用同样的 双下划线 表示关联关系,然后 Django 在就会处理要读取的关联表,并得到关联对象的聚合。...注意 你可能想知道为什么 Django删除与你无关的列。主要原因就是要保证使用 distinct()和其他方法的一致性。

1.6K30

DjangoDjango ORM 学习笔记

数据库查询出来的结果一般是一个集合,这个集合称为 QuerySet。...QuerySet exclude(**kwargs) - 获得不满足查询条件的 QuerySet get(**kwargs) — 数据库获得一个匹配的结果(一个实例),如果没有匹配结果或者匹配结果大于一个都会报错...len 函数 list: 对查询集调用 list() 方法强制求值 bool:测试一个查询集的布尔值,例如使用bool(), or, and 或者 if 语句都将导致查询集的求值 缓存 每个 QuerySet...当首次对 QuerySet 的所有实例进行求值,会将查询结果保存到 QuerySet 的缓冲。当再访问该 QuerySet ,会直接从缓冲取数据。...如果只对 QuerySet 的部分实例(query_set[5], query_set[0:10])进行求值,首先会到 QuerySet 的缓冲查找是否已经缓存了这些实例,如果有就使用缓存值,如果没有就查询数据库

2.2K20

Django之Model操作数据库详解

max_digits,小数总长度 decimal_places,小数位长度 BinaryField(Field)- 二进制类型 五、数据库字段参数 null 数据库字段是否可以为空...使用的字段名,用于代替 【表名_set】 如: obj.表名_set.all() related_query_name=None, # 反向操作,使用的连接前缀,用于替换【表名】...使用的字段名,用于代替 【表名_set】 如: obj.表名_set.all() related_query_name=None, # 反向操作,使用的连接前缀,用于替换【表名】...SQL 的角度,QuerySet和SELECT 语句等价,过滤器是像WHERE 和LIMIT 一样的限制子句。..." 总结: QuerySet.exists() > QuerySet.count()==0 > QuerySet 2、模板显示数据库内容的方法  a、创建数据库 from django.db import

7K10

DjangoAggregation聚合的基本使用方法

(Min('price')) {'price__min': Decimal('12')} aggregate() 方法返回的不再是 QuerySet 了,而是一个包含查询结果的字典。...如果我要对 QerySet 每个元素都进行聚合计算、并且返回的仍然是 QuerySet ,那就要用到 annotate() 方法了。...annotate 翻译过来就是 注解 ,它的作用有点像给 QuerySet 的每个元素临时贴上一个临时的字段字段的值是分组聚合运算的结果。...当你需要对某些字段进行聚合操作(比如Sum, Avg, Max),请使用 aggregate 。...Aggregation聚合的基本使用方法就介绍到这了,更多相关Django Aggregation聚合使用内容搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn

1.1K20
领券