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

Flask SQL-Alchemy创建层次表到同一表的多个外键

Flask SQL-Alchemy是一个Python的ORM(对象关系映射)库,用于在Flask应用程序中进行数据库操作。它提供了一种简单而强大的方式来创建、查询和操作数据库。

在Flask SQL-Alchemy中,创建层次表到同一表的多个外键可以通过定义模型类和关系来实现。下面是一个示例:

代码语言:txt
复制
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Category(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    parent_id = db.Column(db.Integer, db.ForeignKey('category.id'))
    children = db.relationship('Category', backref=db.backref('parent', remote_side=[id]))

    def __repr__(self):
        return self.name

在上面的示例中,我们定义了一个Category模型类,它包含了id、name、parent_id三个字段。parent_id字段是一个外键,指向同一表的id字段。通过db.relationship()方法,我们定义了一个名为children的关系,用于表示一个Category对象可以有多个子Category对象。通过backref参数,我们还定义了一个名为parent的反向引用,用于表示一个Category对象可以有一个父Category对象。

这样,我们就可以使用Flask SQL-Alchemy提供的API来创建、查询和操作这个层次表了。例如,我们可以创建一个根节点的Category对象:

代码语言:txt
复制
root_category = Category(name='Root')
db.session.add(root_category)
db.session.commit()

我们还可以创建一个子节点的Category对象,并将其与父节点关联起来:

代码语言:txt
复制
child_category = Category(name='Child', parent=root_category)
db.session.add(child_category)
db.session.commit()

通过这种方式,我们可以轻松地创建层次表到同一表的多个外键,并进行相关的操作。

关于Flask SQL-Alchemy的更多信息和使用方法,你可以参考腾讯云的相关产品文档:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django框架学习(三)

父模板 如果发现在多个模板中某些内容相同,那就应该把这段内容定义父模板中。 标签block:用于在父模板中预留区域,留给子模板填充差异性内容,名字不能相同。...4.数据库 ORM框架: 作用:将模型类和数据进行对应,通过面向对象方式进行数据库操作。 flask中SQLALchemy Django中自带ORM框架,可以直接进行使用。...,参数DateField DateTimeField 日期时间,参数DateField FileField 上传文件字段 ImageField 继承于FileField,对上传内容进行校验,确保是有效图片...AutoField选项使用 unique 如果为True, 这个字段在中必须有唯一值,默认值是False 在设置时,需要通过on_delete选项指明主表删除数据时,对于引用数据如何处理...,在django.db.models中包含了可选常量: CASCADE 级联,删除主表数据时连通一起删除外中数据 PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被应用数据

1.8K40

数据库系统概况(数据库学习)

三级模式(模式(视图)、模式(基本)、内模式(索引))、两级映射(模式/模式映射、模式/内模式映射) 模式:是对数据库中全部数据逻辑结构和特征描述,是所有用户公共数据视图 模式:是局部数据逻辑结构和特征描述...按照数据结构类型来命名数据模型 (层次结构、网状结构和关系结构模型分别命名为层次模型、网状模型和关系模型) 三要素(三个组成部分):数据结构(静态特征描述)、数据操作(动态特征)、数据完整性约束。...常见三种数据模型: -|层次模型:用树形(层次)结构描述 实体和实体间联系。...-|网状模型:允许多个结点没有双亲结点,也允许一个结点有多个双亲结点,方便地表示各种类型联系(无向图)(性能和效率 高,但是复杂) -|关系模型:数据结构:二维表格结构表示实体、实体间联系...关系模型重要概念:关系(二维)、元组(行)、属性(列)、域(取值范围)、关键字或主码(唯一表示元组属性)、候选关 字或候选码(多个具有主码特征属性)、主属性(所有候选码均匀此属性)、或外码(

97310

Flask中ORM框架之SQLAlchemy插件入门弃坑

# 注意默认继承并不会报错,它会将多个模型数据映射到一张之中,不好之处是可能导致数据混乱并不能满足基本使用,而抽象模型正好解决该问题,它不会在数据库中产生映射; __abstract__ = True...) 在筛选中offset与limit是不区分顺序, 并且order_by必须放在前两者之前; 创建,库手动创建,而采用SQLAlchemy对象 create_all ,删除则通过drop_all...\Day3> WeiyiGeek.模型继承 2.级联数据与 描述:级联数据之外关系 1:1 ForeignKey + Unique 1:M ForeignKey M:N 额外扩充关系多个...ForeignKey 基础实例: 1.反向引用模型构建 2.使用关系 relationship 进行反向引用即级联查询; # Day3\App\models.py # 例如以下数据库模型声明...创建后进行数据库字段迁移升级: PS E:\githubProject\Study-Promgram\Python3\Flask\Day3> python .

3.1K10

数据库主键和

主键、和索引区别?...主键 索引 定义: 唯一标识一条记录,不能有重复,不允许为空 是另一表主键, 可以有重复, 可以是空值 该字段没有重复值,但可以有一个空值 作用: 用来保证数据完整性 用来和其他建立联系用...是提高查询排序速度 个数: 主键只能有一个 一个可以有多个 一个可以有多个惟一索引 聚集索引和非聚集索引区别?...创建: ALTER TABLE news_info[子表名] ADD CONSTRAINT FK_news_info_news_type[约束名] FOREIGN KEY (info_id)[子表列...POREIGN KEY (外部)--通过使用公共列在之间建立一种父子(parent-child)关系,在上定义外部可以指向主键或者其他唯一.

2.3K20

Flask 入门系列教程(五)

URL 必须是保存在 Flask 对象 SQLALCHEMY_DATABASE_URI 中,配置对象中还有一个很有用选项,即 SQLALCHEMY_COMMIT_ON_TEARDOWN ,将其设为...下面是一些常用列选项 ? 关系 在我们当前数据模型下,角色与用户是一对多关系,一个角色可以属于多个用户,而一个用户只可以是一个角色。...这一属性可替代 role_id 访问 Role 模型,此时获取是模型对象,而不是值。 添加到 User 模型中 role_id 列被定义为,就是这个建立起了关系。...数据库迁移 在开发程序过程中,我们会发现有时需要修改数据库模型,而且修改之后还需要更新数据库。 仅当数据库不存在时,Flask-SQLAlchemy 才会根据模型进行创建。...,我们就留到后面的内容中慢慢学习吧 这部分完整代码,可以检出5a 总结 本节我们学习了数据库相关内容,从 SQLAlchemy flask_SQLAlchemy,以及如何在视图函数中使用,还有更加方便迁移数据库等等知识

3.2K31

【数据库设计和SQL基础语法】--连接与联接--多表查询与子查询基础(一)

多对一关系(Many-to-One Relationship): 多个记录对应到另一个唯一记录。 适用于多个实体需要关联同一个实体情况。...多对多关系(Many-to-Many Relationship): 多个记录在一个中可以关联多个记录在另一个中。 通常通过中间(关联)来实现,记录之间复杂关系。...自连接 自连接(Self-Join)是指在同一个中进行连接操作,将视为两个独立实例,通过某个字段值在同一表中建立关联。自连接通常用于处理具有层次结构数据,例如组织架构或分类。...分类体系: 处理具有层次结构分类,例如产品分类,可以使用自连接检索父子级别之间关系。 自连接使得在同一表中查找相关信息变得简便,但需要小心确保连接条件准确性,以避免产生不正确结果。...复杂业务逻辑: 支持复杂业务逻辑和数据分析需求,例如跨越多个实体数据分析、报表生成等。 数据一致性: 通过关系等约束,确保不同之间数据一致性,防止了数据不一致和错误。

22710

Python Web - Flask笔记5

创建属性来映射到字段,所有需要映射到属性都应该为Column类型 使用Base.metadata.create_all()来将模型映射到数据库中。...在这个ORM模型中创建一些属性,来跟字段进行一一映射。这些属性必须是sqlalchemy给我们提供好数据类型。...和四种约束 使用SQLAlchemy创建非常简单。在从中增加一个字段,指定这个字段是哪个哪个字段就可以了。从中外字段,必须和父主键字段类型保持一致。...RESTRICT:父数据被删除,会阻止删除。默认就是这一项。 2. NO ACTION:在MySQL中,RESTRICT。 3. CASCADE:级联删除。 父删子删 4....注意:字段属性不能有nullable=False id = Column(Integer, ForeignKey("user.id", ondelete="RESTRICT")) 注:如果要使用,则数据库引擎必须为

1K10

Flask数据库过滤器与查询集

比如模型与模型之间一种关联,根据角色查询属于这个角色用户有哪些 # 这里设计不像是根据实际情况考虑,而根据模型考虑 # User 是让role对象可以获得user中属性...添加到address模型中person_id列被定义为,就是这个建立起了联系。传给db.ForeignKey()参数’person_id’表明,这一列值是person中行id值。...大多数情况下,db.relationship()都能自行找到关系中,但有时却无法决定把哪一列作为。...但是两侧都是多关系,显然不能通过一个简单来实现。解决办法是添加第三张。 多对多关系一个典型例子是文章与标签之间关系,一篇文章可以有多个标签,一个标签也可以对应多篇文章。...删除对象时,默认层叠行为是把对象联接所有相关对象设为空值。但在关联中,删除记录后正确行为应该是把指向该记录实体也删除,因为这样能有效销毁联接。

6.8K10

Pythonflask:models.py来创建mysql数据库

它存储在你必须创建 SQLAlchemy 实例上。...repr函数,来返回呈现一个值 db.create_all()表示创建所有的 运行创建 $ python models.py 没有报错就创建好了 [artcms.png] 进阶 有很多,各个一些之间有相关联情况...如图,相对很复杂ER图 [ER.png] 如图大部分都是,一个id对于另外一个相对应id 代码如下 # -*- coding: utf-8 -*- # @Time : 2018...,上面代码可以看出,比如user与userlog(第一个与第二个类),useruserlogs表头是要userlog这个建立联系,那么第一个参数就是对应名称,backref后面跟是本名字...接下来就是userlog类Userlog中user_id是userid,通过db.Foreignkey()来建立,参数就是对应.表头,比如上面参数user.id 运行创建

6.1K90

【JavaWeb】63:数据库备份以及多表设计

想要解决这个问题,就要引用约束这个概念,将这两张真真正正地关联起来。 如何添加约束? ? ①建后添加约束 foreign key即为意思。...references,参考意思,这里可以理解成关联。 也就是说把成员dept_id作为,同时与部门id相关联。...这样的话,你想删除部门某个部门,得保证成员中没有该部门成员。 ②建时添加约束 一般来说,会在建时候就添加,格式是一样。 其中: 部门(1对多中1)也叫主表。...成员(1对多中多)也叫从。 也就是说想要删除主表中数据,必须保证从中和其相关数据不存在。 其中一对一表设计和一对多是很相似的,就是任意一张将另外一张id作为就可以了。...那么在多对多中是怎么将两张关联起来? ? 创建一个中间,将这两个关联起来。 中间表表名一般会将这两个名结合起来,见名知意。 中间有两个分别对应两张主键。

68620

3分钟速读原著《高性能MySQL》(二)

一般是在建时候同时创建主键索引: 1.4 组合索引: 指多个字段上创建索引,只有在查询条件中使用了创建索引时第一个字段,索引才会被使用。...因此数据库默认排序可以符合要求情况下不要使用排序操作;尽量不要包含多个排序,如果需要最好给这些列创建复合索引。...) 可以跟基本一样,进行增删改查操作 3.视图作用 方便操作,特别是查询操作,减少复杂SQL语句,增强可读性 更加安全,数据库授权命令不能限定特定行和特定列,但是通过合理创建视图,可以把权限限定行列级别...4.视图使用场景 权限控制时候,不希望用户访问中某些含敏感信息列,比如工资 关键信息来源于多个复杂关联,可以创建视图提取我们需要信息,简化操作 三. 1.定义 是另一表主键,...可以有重复, 可以是NULL 2.作用 用来和其他建立联系用 3.个数 一个可以有多个 4.建议 引用自阿里Java开发手册:【强制】不得使用与级联,一切概念必须在应用层解决

50710

【数据库】MySQL进阶一、主外讲解

MySQL进阶主外讲解 1.什么是: 主键:是唯一标识一条记录,不能有重复,不允许为空,用来保证数据完整性 :是另一表主键, 可以有重复, 可以是空值,用来和其他建立联系用...所以说,如果谈到了,一定是至少涉及两张。例如下面这两张: ? 上面有两张:部门(dept)、员工(emp)。...Id=Dept_id,而Dept_id就是员工:因为员工员工需要知道自己属于哪个部门,就可以通过Dept_id找到对应部门,然后才能找到部门表里各种字段信息,从而让二者相关联。...所以说,一定是在从创建,从而找到与主表之间联系;从负责维护二者之间关系。 2.使用需要满足下列条件:(这里涉及到了InnoDB概念) 1....FOREIGN KEY:将从字段1作为字段。 REFERENCES:映射到主表字段2。

2K70

Pythonflask:models.py来创建mysql数据库

西顾博客 用到flask下有一个叫flask_sqlalchemy数据库框架,没有安装可以使用下面的来安装 $ pip install -i https://pypi.douban.com/simple...它存储在你必须创建 SQLAlchemy 实例上。...__函数,来返回呈现一个值 db.create_all()表示创建所有的 运行创建 $ python models.py 没有报错就创建好了 进阶 有很多,各个一些之间有相关联情况 如图...,相对很复杂ER图 如图大部分都是,一个id对于另外一个相对应id 代码如下 # -*- coding: utf-8 -*-# @Time : 2018/5/16 14:59#...接下来就是userlog类Userlog中user_id是userid,通过db.Foreignkey()来建立,参数就是对应.表头,比如上面参数user.id 运行创建

1.1K60

Python Web - Flask笔记6

ORM关系以及一对多: mysql级别的,还不够ORM,必须拿到一个,然后通过这个再去另外一张中查找,这样太麻烦了。...先把两个需要做多对多模型定义出来 使用Table定义一个中间,中间一般就是包含两个模型字段就可以了,并且让他们两个来作为一个“复合主键”。...但是,如果数据项被设置为nullable=False时候,删除会报错。 ORM层面删除数据,会无视mysql级别的约束。直接会将对应数据删除,然后将从那个设置为NULL。...如果想要避免这种行为,应该将从nullable=False。...在定义模型时候,可以不写__tablename__,那么flask_sqlalchemy会默认使用当前模型名字转换成小写来作为名字,并且如果这个模型名字使用了多个单词并且使用了驼峰命名法,那么会在多个单词之间使用下划线来进行连接

1.9K10

告别宽,用 DQL 成就新一代 BI

我们来分别看一下这几种情况下SQL复杂度以及DQL是怎么解决 属性化 我们用前面提到那个查询中国经理美国员工例子来看一下SQL要怎么写,员工表里有个部门外字段指向部门主键,部门表里又有经理字段指回员工...,字段有了子属性,子属性又有子属性,但并不难理解,也就是部门经理国籍是中国 在DQL语法体系中,被看成了属性,键指向字段可直接用子属性方式引用,也允许多层和递归引用 等同化 这是两个一比一...中,只要把这几个分别按日期对齐分别汇总就行了,而不必关心这些之间关系,在增删时也不容易发生遗漏 如果按维对齐再与一起,情况就会更复杂: 我们希望按地区统计销售员人数和合同额 用SQL写出来是这样...,能让业务人员做JOINBI就做成了 有人可能会问,多表变一表,那不还是宽吗?...,业务人员已经完全不用去管后台是几个,怎么关联了,直接拖拽员工姓名,再拖拽部门经理姓名,然后再设置一下两个国籍,就可以了 关联 同样,多表变一表,主键相同,像员工,经理;客户

1.2K10

数据库作用,以及和主键区别

例如有两个      A(a,b)   :a为主键,b为(来自于B.b)      B(b,c,d)   :b为主键       如果我把字段b属性去掉,对编程没什么影响。  ...最后说一下,建几个原则: 1、 为关联字段创建。 2、 所有的都必须唯一。 3、避免使用复合。 4、总是关联唯一字段。 ...比如,A一个字段,是B主键,那他就可以是A。...二、主键、和索引区别 定义: 主键--唯一标识一条记录,不能有重复,不允许为空 --是另一表主键, 可以有重复, 可以是空值 索引--该字段没有重复值,但可以有一个空值...作用: 主键--用来保证数据完整性 --用来和其他建立联系用 索引--是提高查询排序速度 个数: 主键--主键只能有一个 --一个可以有多个 索引--一个可以有多个唯一索引

5.7K21

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券