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

Django之模型层(多表操作)

book的id和author的id,它会自动把两个模型的id字段写进去的   3,一对一关系   一个作者只能对应一个作者详细信息表,他们之间就是一对一关系,这和多对多一样的,关系写在哪张表都是可以的...二、添加表记录   1,一对多关系   之前我们创建了Book表和Publish表,两者就是一对多的关系,Book表是‘多’的一方,所以外键字段在Book表,Book表添加和之前的不一样,而‘一’的Publish...=1).first() # 在Author表中主键为1的纪录 # 绑定多对多关系,即向关系表book_authors中添加纪录,正向用属性,反向用表名_set 第一种,以Book为基表,因为多对多关系是写在...  之前创建的Author表和Author_Info表之间就是一对一关系,我把关联字段写在了Author表中。...正向查询按属性,反向查询按表名小写   1,一对多查询 # 练习: 查询苹果出版社出版过的所有书籍的名字与价格(一对多) # 正向查询 按字段:publish queryResult

62020

Django 模型层之多表操作

models.CharField(max_length=255) price = models.DecimalField(max_digits=5, decimal_places=2) # 外键,关联关系写在一对多中多的那一方...字段不写的话会自动添加 2.对于外键字段,Django会在字段名上添加"_id"来创建数据库中的列名 3.外键字段ForeignKey有一个null=True的设置,你可以赋给它空值None 二.添加表记录...先清空再设置,传递的参数必须是可迭代对象,一般为列表,列表内可以是对象,也可以是id book.authors.set() 三.基于对象的跨表查询 一对一查询 正向查询(按字段:authordetail...'addr') 一对多查询 正向查询(按字段):publish # 查询西游记的出版社名 models.Book.objects.filter(name='西游记').values('publish__...()之前,表示group by,之后,表示为取值 filter在annotate()之前,表示过滤,之后,表示having 六.F查询与Q查询 F查询 现在位置的操作种,都是将模型字段与常量进行比较,但是

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

    JavaWeb06-MySQL深入学习这些就够了!

    二.多表设计与实现(外键约束) 系统设计中,实体之间的关系有三种:一对一,一对多,多对多 也就是说,数据库开发中表与表之间的关系有三种,而表与表之间关系是通过外键来维护的。...,那么我们怎样在表中描述它们的对应关系我们一般在多的一方表中简称(多表),添加一个外键字段,与一方表中的主键字段对应就可以描述其一对多的关系。...开发中,一般新建一张中间表,这个中间表只放双方的id,然后就拆成了两个一对多的关系.然后一般将两个id设成联合主键,然后对每个id添加外键约束.如下图....num VARCHAR(20) -- 身份证号 ) 总结: 对于一对一关系,我们在表中描述时,可以在任意一方描述 对于一对多关系,我们在表中描述时,在多的一方描述 对于多对多关系,我们在表中描述时,会产生一个中间表...隐式内连接 我们在实际开发中,它的使用频率是最高的,其实就是将inner join省略,也不在使用on进行条件过滤,而是直接使用where进行过滤。

    1.4K60

    MySQL表的增删改查(进阶)

    表的设计 在数据库设计中,表之间的关系是至关重要的。MySQL支持一对一、一对多和多对多的关系。 一对一 每个记录只对应另一个表中的一条记录。...一对多 一种常见的表关系,在这种关系中,父表的每一条记录可以与子表中的多条记录相关联。 多对多 多对多关系通常需要一个中间表来映射两张表的关系。 4....WHERE:过滤数据,通常在GROUP BY之前使用,来限制参与分组的数据。 GROUP BY:将数据按指定列进行分组。...,下次可能会出现其他两个值,所以会有错误) 5.3 HAVING HAVING用于在分组查询后对结果进行过滤。...如果右表中没有匹配的记录,结果中的右表字段将为NULL。 SELECT 列1, 列2, ...

    6310

    Django学习笔记之ORM多表操作

    注意事项:  表的名称myapp_modelName,是根据 模型中的元数据自动生成的,也可以覆写为别的名称   id 字段是自动添加的  对于外键字段,Django 会在字段名上添加"_id" 来创建数据库中的列名...,publish_id=1) # 为书籍绑定的做作者对象 yuan=Author.objects.filter(name="yuan").first() # 在Author表中主键为2的纪录...''' 正向查询按字段,反向查询按表名小写用来告诉ORM引擎join哪张表 ''' 一对多查询 # 练习: 查询苹果出版社出版过的所有书籍的名字与价格(一对多) # 正向查询 按字段....values_list("name","SumPrice") print(queryResult) F查询与Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。

    2.8K40

    MySQL 查询专题

    WITH ROLLUP:在 GROUP 分组字段的基础上再进行统计数据。...这是一个重要的区别,WHERE 排除的行不包括在分组中。这可能会改变计算值,从而影响 HAVING 子句中基于这些值过滤掉的分组。...你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。 你可以设定多个字段来排序。 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。...一对一关系 (夫妻关系) 从表的主键即是外键 一对多关系(部门和职员的关系) 从表有一个键作为外键 多对多(学生老师关系) 需要一个中间表, 然后指定两个外键 一般主表的记录数会少....因为主要是一对多的关系. 主表是一.

    5K30

    深度长文探讨Join运算的简化和提速

    谈论JOIN时一般还会根据两个表中关联记录(也就是满足过滤条件的二元组)的数量分为一对一、一对多、多对一以及多对多这几种情况,这些常规术语在SQL和数据库资料中都有介绍,这里就不再赘述了。...即将关联表的记录按其关联键(过滤条件中对应相等的字段,即A.a和B.b)的HASH值分成若干组,将相同HASH值的记录分到一组。...外键关联 表A的某个字段和表B的主键字段关联(所谓字段关联,就是前一节说过的在等值JOIN的过滤条件中要对应相等的字段)。A表称为事实表,B表称为维表。...在SQL的概念体系中并不区分外键表和主子表,多对一和一对多从SQL的观点看来只是关联方向不同,本质上是一回事。确实,订单也可以理解成订单明细的外键表。...事实上,这种对象式写法在高级语言(如C,Java)中很常见,在这类语言中,数据就是按对象方式存储的。employee表中的department字段取值根本就是一个对象,而不是编号。

    48110

    Laravel Eloquent 模型关联关系(下)

    注:实际开发中为了提高查询性能,我们往往是在 posts 表中冗余提供一个 comments_count 字段,每新增一条评论,该字段值加 1,查询的时候直接取该字段即可,从而提高查询的性能。...在渴求式加载中,也可以通过闭包传入额外的约束条件,只不过这个约束条件是对关联模型自身的过滤,不影响目标模型的查询: $post = Post::with(['comments' => function...->paragraph, 'user_id' => mt_rand(1, 15)] ]); 更新一对多所属模型外键字段 如果是要更新新创建的模型实例所属模型(父模型)的外键字段,比如以 posts 表为例...多对多关联的绑定与解除 在插入多对多关联记录的时候,可以通过上面一对多关联记录插入的方式。...、一对多、多对多、远层一对多、一对一的多态关联、一对多的多态关联、多对多的多态关联; 以上关联关系的查询,主要包含两种方式:懒惰式加载和渴求式加载; 基于关联查询构架复杂查询对查询结果进行过滤; 关联模型的更新

    19.6K30

    理解elasticsearch的parent-child关系

    Parent-Child与Nested非常类似,都可以用来处理一对多的关系,如果多对多的关系,那就拆分成一对多在处理。...parent id字段有两个用途: (1)它创建了连接父子文档的关系并且确保了子文档一定和父文档存在一个shard里面 (2)默认情况下es用的是文档的id字段进行hash取模分片的,如果父文档的id字段被指定...,那么路由字段就是id,而在子文档中我们指定parent的值也是父文档的id字段,所以就一定确保了父子文档都在一个shard里面,在父子文档的关系中,index,update,add,delete包括search...得分设置为none拥有更快的查询性能,因为少了额外的计算 此外has_child查询还可以接受两个限制参数min_children和max_children,在查询的时候根据子文档的个数做过滤,看下面的一个例子...上面聚合的意思是: 按国家分组,然后算组内的员工再根据其爱好进行分组 最后,parent-child模式,支持多层的关系 一个对多对多,目前官网上给出了3层关系的例子,从社区上来看说是支持无限层级的关系映射

    2.9K60

    Flask数据库过滤器与查询集

    最为常见的关系就是一对多关系,因为关系在它们建立之前就已经声明。...在一对多关系中,要在多这一侧加入一个外键,指向一这一侧联接的记录,即relationship()声明出现在代表少那个类,而外键声明出现在代表多的那个类中。...若想知道某篇文章有多少个标签,首先从posts和connections之间的一对多关系开始,获取这篇文章在connections表中的所有和这篇文章相关的记录,然后再按照多到一的关系在tags表中查找对应的所有标签...= db.Column(db.Integer, primary_key=True) 多对多关系仍使用定义一对多关系的db.relationship()方法进行定义,但在多对多关系中,必须把secondary...自引用关系 多对多关系在我们的Web应用中可以用来实现用户之间的关注,但是在上面的文章和标签的例子中,关联表连接的是两个明确的实体,而在用户关注其他用户时,都在users表内,只有一个实体。

    7K10

    ORM初识和数据库操作

    添加记录 一对多添加记录: # 一对多的添加 # 方式一:如果是这样直接指定publish_id字段去添加值,前提是你的主表里面必须有数据 # 主表:没有被关联的(因为book表是要依赖于...各有应用场景 三、基于对象的查询记录(相当于sql语句的where子查询) 一对一查询记录:author和authordetile是一对一的关系 正向查询(按字段author) 反向查询(按表名authordeital...多对多查询记录: 正向查询(按字段authorlist) 反向查询(按表名book_set) # 多对多的查询 # 正向查询:查询追风筝的人的这本书的所有的作者的姓名和年龄 book_obj...我们构造的过滤器都只是将字段值与某个常量做比较。...如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较。F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。

    2.6K30

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

    一 创建模型 表和表之间的关系     一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束...正向查询(按字段:authors):     反向查询(按表名:book_set): 注意:       你可以通过在 ForeignKey() 和ManyToManyField的定义中设置 related_name...''' 基于双下划线的查询就一句话:正向查询按字段,反向查询按表名小写用来告诉ORM引擎join哪张表,一对一、一对多、多对多都是一个写法,注意,我们写orm查询的时候,哪个表在前哪个表在后都没问题...''' 一对多查询 # 练习: 查询苹果出版社出版过的所有书籍的名字与价格(一对多) # 正向查询 按字段:publish queryResult=Book.objects             ...F() 的实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段的值。

    2.7K20

    MySQL快速入门(二)

    values('Hammer',1); insert into t1(id) values(1); # name没有传就为null 在MySQL中不传数据 会使用关键字NULL填充意思就是空..., name varchar(32) ); 自增的特性 通俗的理解,序号删除了就会接着以前的序号往下排,或者插入了序号失败的就不计入,那么在mysql中,序号插入失败后台也会记录,比如插入id...多对多 一对一 没有对应关系 ps:表关系没有'多对一' 如何判断两个表或者多个表之间存在关系?...''' 类似上面的这种关系,一个可以一个不可以,那么表关系就是'一对多'!...,外键字段只能填写被关联表中已经存在的数据 在修改和删除被关联表中的数据的时候,无法直接操作,需要添加级联更新/删除 操作表方法 方法如下 方法名 说明 格式 rename 修改表名 ALTER TABLE

    2.6K20

    超详细的MySQL三万字总结

    实际应用中,一般要指定查询的条件。对记录进行过滤。...表与表之间的三种关系 一对多:最常用的关系 部门和员工 多对多:学生选课表 和 学生表, 一门课程可以有多个学生选择,一个学生选择多门课程 一对一:相对使用比较少。...员工表 简历表, 公民表 护照表 一对多 一对多(1:n) 例如:班级和学生,部门和员工,客户和订单,分类和商品 一对多建表原则: 在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键....多对多 多对多(m:n) 例如:老师和学生,学生和课程,用户和角色 多对多关系建表原则: 需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键。...一对一 一对一(1:1) 在实际的开发中应用不多.因为一对一可以创建成一张表。

    3.4K30

    定了!MySQL基础这样学

    6.6.2、一对多(多对一)     一对多(多对一):最为常见的就是一对多!一对多和多对一,这是从哪个角度去看得出来的。...t_user和t_section的关系,从t_user来看就是一对多,而从t_section的角度来看就是多对一!这种情况都是在多方创建外键!...14.2、第二范式     建立在第一范式的基础上,所有非主键字段完全依赖于主键,不能产生部分依赖。 ​ 典型的例子就是解决多对多的问题上,遇到多对多的时候,背口诀:多对多?...三张表,关系表两外键 14.3、第三范式     建立在第二范式的基础上,所有非主键字段直接依赖主键,不能产生传递依赖。     典型的例子就是一对多,遇到一对多问题的时候背口诀:一对多?...三张表,关系表两外键 14.3、第三范式     建立在第二范式的基础上,所有非主键字段直接依赖主键,不能产生传递依赖。     典型的例子就是一对多,遇到一对多问题的时候背口诀:一对多?

    2.2K20

    Django基础篇-表关联对象

    (一对多,多对多) create(**kwargs) 添加不存在的数据,将数据直接存入数据库,创建一个新的对象,将它保存并放在新创建的对象。...(一对一,多对多) remove(obj1, obj2, ...) 从关联的对象集中删除指定的模型对象。(多对多) 删除的是关系表中的数据 clear() 从关联的对象集中删除所有的对象。...(多对多) >>> s3.course.clear() 注意: 对于所有类型的关联字段,add()、create()、remove() 和 clear()都会马上更新数据库。...在关联的任何一端,都不需要再调用 save() 方法。 直接赋值 ②多表查询 Django 提供一种强大而又直观的方式来“处理”查询中的关联关系,它在后台自动帮你处理 JOIN。...当你基于 ManyToManyField 或反向的 ForeignKey 来过滤一个对象时,有两种不同种类的过滤器。考虑 Department/Student 关联关系 (一对多的关系)。 ?

    1.2K40

    django_2

    要求 修改数据库 Django shell 数据级联(一对多) 元信息 定义字段 模型过滤 创建对象4种方式 查询集 过滤器 获取单个对象 字段查询 时间 聚合函数 跨关系查询 F对象 Q对象...·unique ·如果为 True, 这个字段在表中必须有唯一值 关系 ·分类 ·ForeignKey:一对多,将字段定义在多的端中 ·ManyToManyField...:多对多,将字段定义在两端中 ·OneToOneField:一对一,将字段定义在任意一端中 ·用一访问多 ·格式 ·对象.模型类小写_set ·示例 grade.students_set...·如果为 True, 这个字段在表中必须有唯一值 关系 ·分类 ·ForeignKey:一对多,将字段定义在多的端中 ·ManyToManyField:多对多,将字段定义在两端中...·OneToOneField:一对一,将字段定义在任意一端中 ·用一访问多 ·格式 ·对象.模型类小写_set ·示例 grade.students_set

    3.6K30

    Django——model基础

    ,也可以覆写为别的名称   2、id 字段是自动添加的 3、对于外键字段,Django 会在字段名上添加"_id" 来创建数据库中的列名 4、这个例子中的CREATE TABLE SQL 语句使用PostgreSQL...在更新多对多的第三张表时,可以直接用以下方法 book_obj.authors.set(*[装有对象id的列表]) 此操作包含了两步clear+add 有时候字段获取的较多,但是需要更新的表里没有那么多字段...class RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。它存在于下面两种情况: ForeignKey关系的“另一边”。像这样: ?...# 练习1: 查询人民出版社出版过的所有书籍的名字与价格(一对多) # 正向查询 按字段:publish queryResult=Book.objects             ...3.Max:返回所给字段的最大值 4.Min:返回所给字段的最小值 5.Sum:计算所给字段值的总和 F查询与Q查询 F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个常量做比较。

    1.1K100

    SpringDataJPA笔记(1)-基础概念和注解

    在 javax.persistence.GenerationType 中定义了以下几种可供选择的策略: IDENTITY:采用数据库 ID自增长的方式来自增主键字段,Oracle 不支持这种方式;...@Where 在互联网项目中,通常删除都不是物理删除,而是逻辑删除。那么在展示数据的时候需要过滤掉已删除的数据。而@Where 注解可以说就是为此而设计的。...,多对一的关联,一对多的关联,多对多的关联 @JoinTable JoinTable在many-to-many关系的所有者一边定义。...entity class的所有id field在id class都要定义,且类型一样。 @MapKey 在一对多,多对多关系中,我们可以用Map来保存集合对象。...默认用主键值做key,如果使用复合主键,则用id class的实例做key,如果指定了name属性,就用指定的field的值做key @OrderBy 在一对多,多对多关系中,有时我们希望从数据库加载出来的集合对象是按一定方式排序的

    4K20
    领券