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

Django框架学习(四)

:可以写多个查询条件,默认是且关系 对应get,filter,exclude参数可以写查询条件 格式:属性名__条件名=值 1.3F对象 用于查询时字段之间比较 from django.db.models...order_by 1.7关联查询 1、查询和指定对象关联数据(重点掌握) 由一查多:一象.多类名小写__set.all() 由多查一:多对象.属性 2、通过模型进行关联查询 查图书:一类.objects.get...|filter(多类名__字段__条件=值) 查英雄:多类.objects.filter(属性__字段__条件=值) 2.查询 注意:对于queryset类对象,可以继续调用之前任何一个查询函数...两大特性: 1、惰性查询:只有在使用查询集中数据时才会进行数据库真正查询操作 2、查询结果缓存:如果使用同一个查询时,只有在第一次使用查询时会进行数据库查询操作,然后Django框架就会把查询结果存起来...,下一次再使用这个查询时候,使用Django之前存储结果。

1.5K41

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

连接和聚合 至此,我们已经了解了作用于单种模型实例聚合操作, 但是有时,你也想查询对象关联对象进行聚合。...=Min('books__price'), max_price=Max('books__price')) 这段代码告诉 Django 获取书店模型,并连接(通过多关系)图书模型,然后每本书价格进行聚合...例如,我们可以查询所有出版商,并注上它们一共出了多少本书(注意我们如何用 ‘book’指定Publisher -> Book 反转关系): >>> from django.db.models import...例如,我们可以查询每个作者,注上它写所有书(以及合著书)一共有多少页(注意我们如何使用 ‘book’来指定Author -> Book反转关系): >>> Author.objects.annotate...例如,根据一本图书作者数量多少查询 QuerySet进行排序: >>> Book.objects.annotate(num_authors=Count('authors')).order_by('

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

Django相关知识点回顾

all 无 查询模型类对应表格所有数据 QuerySet(查询) get 查询条件 查询满足条件一条且只能有一条数据 模型类对象,查不到会报错DoesNotExist filter 查询条件 返回满足条件所有数据...QuerySet(查询) exclude 查询条件 返回不满足条件所有数据 QuerySet(查询) order_by 排序字段 查询结果进行排序 QuerySet(查询) aggregate...()过滤器调用聚合函数 排序排序默认是升序,降序在排序字段前加- 使用order_by 关联查询: 1.查询和指定对象关联数据 # 由1查多 一象.多类名小写_set.all() 例:book.heroinfo_set.all...() # 由多查1 多对象.属性 例:hero.hbook 2.通过模型进行关联查询 # 查图书(一) 一类.objects.get|filter(多类名__字段__条件=值) 例:books =...查询结果缓存 使用同一个查询时,只有在第一次使用查询时会进行数据库查询操作,然后Django框架就会把查询结果存起来,下一次再使用这个查询时,使用Django之前存储结果。

10K51

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

在实际项目中,数据模型通常通过数据库实现持久化操作,而关系型数据库在过去和当下都是持久化首选方案,下面我们以MySQL为例来说明如何使用关系型数据库来实现持久化操作。...我们可以通过manage.py开启Shell交互式环境,然后使用Django内置ORM框架模型进行CRUD操作。...,所以也能通过部门反向查询该部门员工(从一关系“一”一方查询“多”一方),反向查询属性默认名字是类名小写_set(如上面例子emp_set),当然也可以在创建模型时通过ForeingKey...SET_DEFAULT:把设置为默认值,提供了默认值才能这么做。 ManyToManyField属性 symmetrical:是否建立对称关系。...through:指定维持多关系中间表Django模型。 throughfields:定义了中间模型时可以指定建立多关系字段。 db_table:指定维持多关系中间表表名。

2.2K30

Django之ForeignKey和ManyToManyField多表查询

ForeignKey.related_query_name以ForeignKey.related_name作为默认值 使用ForeignKey查询 前向查询关系模型A包含与模型B关联关联字段, 模型...提供了一种使用双下划线__查询语法: >>> Entry.objects.filter(blog__name='Beatles Blog') 反向查询 被索引关系模型可以访问所有参照它模型实例,...如Entry.blog作为Blog,默认情况下Blog.entry_set是包含所有参照BlogEntry示例查询,可以使用查询API取出相应实例。...ManyToManyField.through_fields 上文示例Membership 有两个键指向Person (person 和inviter),这使得关联关系含混不清并让Django 不知道使用哪一个...ManyToManyField 字段模型键名称(本例为group),field2 为指向目标模型名称(本例为person).

1.7K10

Django之QuerySet详解

exclude() 排除满足条件对象 annotate() 使用聚合函数 order_by() 查询进行排序 reverse() 反向排序 distinct() 查询去重...若要按照另外一个模型字段排序,可以使用查询关联模型语法。即通过字段名称后面跟两个下划线(__),再加上新模型字段名称,直到希望连接模型。...换句话说,用order_by()方法QuerySet对象进行操作会返回一个扩大版新QuerySet对象。因此,使用多值字段结果进行排序时要格外小心。 没有方法指定排序是否考虑大小写。...例如: >>> qs1.difference(qs2, qs3) 16. select_related() select_related(*fields) 沿着关系查询关联对象数据...这会生成一个复杂查询并引起性能损耗,但是在以后使用关系时将不需要再次数据库查询。 下面的例子解释了普通查询和select_related()查询区别。

2.3K20

Django之ORM

Django官方文档https://docs.djangoproject.com/en/2.1/ref/models/fields/ 3.表与表之间关联 1. 即一关系 school=models.ForeignKey...表示多关系。 除了这种方式也可以手动创建一个表,手动添加两个来实现多多。...field): 查询结果排序 reverse(): 查询结果反向排序 distinct(): 从返回结果剔除重复纪录 values_list(*field): 它与values()非常相似,它返回是一个元组序列...2.QuerySet对象 查询结果就是一个QuerySet对象 QuerySet对象就像是一个列表,列表存储着查询结果,可以迭代,可以切片 DjangoQuerySet对象是惰性,即你得到这个对象时候并没有真正在数据库执行...不区分大小写 等等 5.聚合查询aggregate 聚合查询QuerySet对象进行计算得到一个结果值作为字典值放到一个字典 这里先引入一些聚合方法 from django.db.models

1.1K30

django-orm F对象使用 按照两个字段和,乘积排序实例

class F F()是代表模型字段值,也就是说对于一些特殊字段操作,我们不需要数据先取到内存,然后操作,在存储到db中了。 以下为几个使用经典场景: 1....补充知识:Django查询数据库时各种种类排序 按照entry_date从小到大查询数据,可以写成: Content.objects.order_by(‘entry_date’) 从大到小排序:...按照关系字段排序 class Category(Base): code = models.CharField(primary_key=True,max_length=100) title = models.CharField...code,Content进行排序,只需要后加双下划线 Content.objects.order_by('category__title') # 如果只是按照排序,会默认按照关联主键排序...以上这篇django-orm F对象使用 按照两个字段和,乘积排序实例就是小编分享给大家全部内容了,希望能给大家一个参考。

1.7K20

Django之Model操作数据库详解

Django ORM框架功能: 建立模型类和表之间对应关系,允许我们通过面向对象方式来操作数据库。 根据设计模型类生成数据库表格。 通过方便配置就可以进行数据库切换。...=2) #创建书出版社信息,其与出版社关系为一多,所以用 publish = models.ForeignKey(Publish) #创建书出版日期...查询结果排序 reverse() 查询结果反向排序 distinct() 从返回结果剔除重复记录 values_list(*field...Meta类ordering属性QuerySet对象进行排序     Student.objects.filter(school="阳关小学").order_by('-age', 'name'...__gt=4 九、实例 1、DjangoORM如何判断查询结果是否为空,判断djangoorm为空 result= Booking.objects.filter() 方法一 .exists()

7K10

django 1.8 官方文档翻译:2-1-1 模型语法

,要显式指定并关联到多关系涉及模型。...中介模型有一些限制: 中介模型必须有且只有一个到源模型(上面例子Group),或者你必须使用ManyToManyField.through_fields 显式指定Django 应该使用。...如果你模型存在超个一个,并且through_fields没有指定,将会触发一个无效错误。 目标模型有相同限制(上面例子 Person)。...对于通过中介模型与自己进行多关联模型,允许存在到同一个模型两个,但它们将被作为多多关联关系两个(不同)方面。...Changed in Django 1.7: 在Django 1.6 及之前版本,中介模型禁止包含多于一个

4.9K20

Django项目知识点(四)

exclude() 排除满足条件对象 annotate() 使用聚合函数 order_by() 查询进行排序 reverse() 反向排序 distinct() 查询去重...file_url','file_name','title','desc','image_url').filter(is_delete= False) select_related() 如果我要拿这个模型通过绑定另外一个模型...当我们需要对查询(queryset)某些字段进行计算或进行先分组再计算或排序, 我们就需要使用aggregate和annotate方法了。...这样就可以引用模型字段值并使用它们执行数据库操作,而无需实际将它们从数据库拉出到Python内存 说白了就是我从数据库拿东西,但是有些需要字段没有,要通过绑定appmodel拿。...但是名称又是app__字段来命名,这样我要改名称,而且拿第一次model,放在python内存,再拿通过绑定另一个model,又要执行第一次步骤,那个效率就不行了,干嘛我不一起拿,所以会用annotate

1.5K30

django_2

要求 修改数据库 Django shell 数据级联(一多) 元信息 定义字段 模型过滤 创建对象4种方式 查询 过滤器 获取单个对象 字段查询 时间 聚合函数 跨关系查询 F对象 Q对象...dept 部门表:主表 emp 员工表:从表 两张中有级联关系 带主键表是主表 带表是从表 关联关系放在从表 (团员找班长--> 快) sql优化 一模型关系: class Grade..., 这个字段在表必须有唯一值 关系 ·分类 ·ForeignKey:一多,将字段定义在多 ·ManyToManyField:多多,将字段定义在两端 ·OneToOneField.../缓存 查询缓存:每个查询都包含一个缓存,来最小化对数据库访问 在新建查询集中,缓存首次为空,第一次查询求值,会发生数据缓存,django会将查询出来数据做 一个缓存,并返回查询结果...,以后查询直接使用查询缓存。

3.6K30

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

执行查询 一旦你建立好数据模型之后,django会自动生成一套数据库抽象API,可以让你执行增删改查操作。这篇文档阐述了如何使用这些API。关于所有模型检索选项详细内容,请见数据模型参考。...python对象,django使用一种直观方式:一个模型类代表数据库一个表,一个模型实例代表数据库表一条特定记录。...一般来说, QuerySet 切片会返回新 QuerySet – 这个过程不会对运行查询。不过也有例外,如果你在切片时使用了 “step” 参数,查询就会被求值,就在数据库运行查询。...一关系 正向 如果一个 model 有一个 ForeignKey字段,我们只要通过使用关联 model 名称就可以得到相关联对象。...其后根据访问时这个实例,就会从缓存获得它。

4.3K20

07.Django学习之model进阶

首次查询进行求值 —— 同时发生数据库查询 ——Django 将保存查询结果到查询(非简单查询查询结果,简单查询往下看。)...缓存并返回明确请求结果(例如,如果正在迭代查询,则返回下一个结果)。接下来查询 求值将重用缓存结果。 请牢记这个缓存行为,因为查询使用不当的话,它会坑你。...查询不会永远缓存它们结果。当只对查询部分进行求值时会检查缓存, 如果这个部分不在缓存,那么接下来查询返回记录都将不会被缓存。所以,这意味着使用切片或索引来限制查询将不会填充缓存。...对于一一字段(OneToOneField)和字段(ForeignKey),可以使用select_related 来QuerySet进行优化。...select_related 返回一个QuerySet,当执行它查询时它沿着关系查询关联对象数据。它会生成一个复杂查询并引起性能损耗,但是在以后使用关系时将不需要数据库查询

2K30

06.Django基础五之django模型层(二)多表操作

一 创建模型 表和表之间关系     一一、多一、多多 ,用book表和publish表自己来想想关系,想想里面的操作,加约束和不加约束区别,一约束是在一约束上加上唯一约束...注意事项: 表名称myapp_modelName,是根据 模型元数据自动生成,也可以覆写为别的名称   id 字段是自动添加 对于字段,Django 会在字段名上添加"_id" 来创建数据库列名...但是我们就不能使用ORM相关方法了,所以我们单纯换成一个其他字段类型,只是单纯存着另外一个关联表主键值是不能使用ORM方法。...#db_constraint=False只加两者关系,没有强制约束效果,并且ORM相关接口(方法)还能使用,所以如果将来公司让你建立,并且不能有强制约束关系,那么就可以将这个参数改为False...Django 提供两种方法使用原始SQL进行查询:一种是使用raw()方法,进行原始SQL查询并返回模型实例;另一种是完全避开模型层,直接执行自定义SQL语句。

2.6K20

django 1.8 官方文档翻译: 2-6-4 数据库访问优化

这篇文档剩下部分,着重于讲解如何以不做无用功方式使用Django。这篇文档也没有强调用在开销大操作上其它优化技巧,像general purpose caching。...理解查询 理解查询(QuerySets) 是通过简单代码获取较好性能至关重要一步。特别是: 理解查询计算 要避免性能问题,理解以下几点非常重要: QuerySets是延迟。...在数据库而不是Python做数据库工作 比如: 在最基础层面上,使用过滤器和反向过滤器对数据库进行过滤。 使用F 表达式在相同模型基于其他字段进行过滤。 使用数据库注解和聚合。...直接使用值 如果你仅仅需要当中一个值,要使用对象上你已经取得值,而不是获取整个关联对象再得到它主键。...如果一个模型具有默认顺序(Meta.ordering),并且你并不需要它,通过在查询上无参调用order_by() 来移除它。 向你数据库添加索引可能有助于提升排序性能。

1.1K30

Django多字段更新和插入数据实例

()等查询(QuerySet) book_obj.save() #-------一定得save(),才能对数据库进行修改 return redirect('/index/') 补充知识...:DjangoManyToManyField(多多)使用以及through作用 创建一个经典关系:一本书可以有多个作者,一个作者可以有多本书(如下) ?...那么我们如何进行数据查询呢?...,Django允许指定一个用于管理多关系中间模型,然后就可以把这些额外字段添加到这个中间模型,具体方法就是在ManyToMany字段中指定through参数指定作为中介中间模型,修改上述models.py...,这两个定义了两个模型之间是如何关联到一起 所以当创建多关系模型时候提倡使用through参数去指定并创建中间模型,这样比较方便我们进行字段扩展 那么此时我们又该如何添加和删除多关系

4.1K30

Django-model进阶(中介模型查询优化,extra,整体插入)

在一个新创建查询集中,缓存为空。首次查询进行求值 —— 同时发生数据库查询 ——Django 将保存查询结果到查询缓存并返回明确请求结果(例如,如果正在迭代查询,则返回下一个结果)。...查询不会永远缓存它们结果。当只对查询部分进行求值时会检查缓存, 如果这个部分不在缓存,那么接下来查询返回记录都将不会被缓存。所以,这意味着使用切片或索引来限制查询将不会填充缓存。...对于这些情况,Django 允许你指定一个中介模型来定义多关系。 你可以将其他字段放在中介模型里面。源模型ManyToManyField 字段将使用through 参数指向中介模型。...对于一一字段(OneToOneField)和字段(ForeignKey),可以使用select_related 来QuerySet进行优化。...select_related 返回一个QuerySet,当执行它查询时它沿着关系查询关联对象数据。它会生成一个复杂查询并引起性能损耗,但是在以后使用关系时将不需要数据库查询

1.6K70
领券