前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SQLAlchemy中的自引用

SQLAlchemy中的自引用

作者头像
用户1214487
发布于 2018-03-28 06:46:33
发布于 2018-03-28 06:46:33
1.5K00
代码可运行
举报
文章被收录于专栏:PythonPython
运行总次数:0
代码可运行

SQLALCHEMY采用adjacency list pattern来表示类的自引用。

例如,对于类Node自引用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Node(Base):
    __tablename__='node'
    id=Column(Integer,primary_key=True)
    parent_id=Column(Integer,ForeignKey('node.id'))
   data=Column(String(50))
    children=relationship('Node')

对于如下图所示的结构:

root--------------->child1

-------->child2---------->subchild1

---------->subchild2

-------->child3

可能有如下数据:

id parent_id data

1 NULL root

2 1 child1

3 1 child2

4 3 subchild1

5 3 subchild2

6 1 child3

无论自引用是一对多还是多对一,通常默认是一对多。如果想建立多对一的关系,需要在relationship()中添加remote_side属性,remote_side属性包含一列或多列。如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Node(Base):
    __tablename__='node'
    id=Column(Integer,primary_key=True)
    parent_id=Column(Integer,ForeignKey('node.id'))
    data=Column(String(50))
    parent=relationship("Node",remote_side=[id])
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SqlAlchemy 2.0 中文文档(十二)
邻接列表模式是一种常见的关系模式,其中表包含对自身的外键引用,换句话说是自引用关系。这是在平面表中表示层次数据的最常见方法。其他方法包括嵌套集,有时称为“修改的先序”,以及材料路径。尽管在 SQL 查询中评估其流畅性时修改的先序具有吸引力,但邻接列表模型可能是满足大多数层次存储需求的最合适模式,原因是并发性、减少的复杂性,以及修改的先序对于能够完全加载子树到应用程序空间的应用程序几乎没有优势。
ApacheCN_飞龙
2024/06/26
2430
Python 数据库骚操作 -- MySQL
今天这篇是三大数据库的结尾篇,前面两篇分别是:《Python 数据库骚操作 -- MongoDB》《Python 数据库骚操作 -- Redis》,这篇主要介绍 MySQL 的 orm 库 SQLAlchemy 。那什么是 orm 呢?Object Relational Mapper,描述程序中对象和数据库中数据记录之间的映射关系的统称。介绍完了,那就走起呗!
1480
2019/08/05
5300
Python 数据库骚操作 -- MySQL
SqlAlchemy 2.0 中文文档(十一)
本节描述了relationship()函数及其用法的深入讨论。关于关系的介绍,请从使用 ORM 相关对象开始,参阅 SQLAlchemy 统一教程。
ApacheCN_飞龙
2024/06/26
2400
SQLAlchemy学习-9.一对多和多对一关系
前言 一对多和多对一关系 一对多关系 一对多关系表设计,一个Parent类关联多个Child类 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine, Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship # 拼接配置dialect + driver://username:pa
上海-悠悠
2022/08/26
3.3K0
SQLAlchemy学习-9.一对多和多对一关系
SQLAlchemy 数据表自关联
对于使用 SQLAlchemy 建立数据表之间的关系前面的文章 SQLAlchemy 定义关系 已经进行了介绍,今天主要看单个数据表之内的关联。
keinYe
2019/08/01
3K0
SqlAlchemy 2.0 中文文档(七十八)
本文档描述了 SQLAlchemy 版本 0.7(截至 2012 年 10 月正在进行维护发布)和 SQLAlchemy 版本 0.8(预计于 2013 年初发布)之间的更改。
ApacheCN_飞龙
2024/08/26
1640
SQLAlchemy外键的使用
orm可以将数据库存储的数据封装成对象,同时,如果封装的好的话,所有的数据库操作都可以封装到对象中。这样的代码在组织结构上会非常的清晰,并且相对与使用sql语句在sql注入方面会极具降低。 SQLAlchemy中的映射关系有四种,分别是一对多,多对一,一对一,多对多 实现这种映射关系只需要外键(ForeignKey),和relationship 一对多: from sqlalchemy.ext.declarative import declarative_base from sqlalchemy impor
用户1173509
2018/01/17
2.3K0
常见关系模板代码
以下罗列了使用关系型数据库中常见关系定义模板代码 一对多 示例场景: 用户与其发布的帖子(用户表与帖子表) 角色与所属于该角色的用户(角色表与多用户表) 示例代码 class Role(db.Model): """角色表""" __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) users
汪凡
2019/03/01
5230
SQLAlchemy学习-4.一对一关系
前言 表之间一对一关系 foreign key (外键) 父表类中通过 relationship() 方法来引用子表的类集合 在子表类中通过 foreign key (外键)引用父表类 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine, Column, Integer, String, ForeignKey from sqlalchemy.orm import relati
上海-悠悠
2022/07/19
1.2K0
SQLAlchemy学习-4.一对一关系
SqlAlchemy 2.0 中文文档(五十五)
numpy包具有其自己的数字数据类型,它们是从 Python 的数字类型扩展而来的,但是其中包含一些行为,在某些情况下使它们无法与 SQLAlchemy 的一些行为以及使用的底层 DBAPI 驱动程序的一些行为协调一致。
ApacheCN_飞龙
2024/08/01
4700
SQLAlchemy学习-5.relationship之backref和back_populates参数
前言 relationship 函数是 sqlalchemy对关系之间提供的一种便利的调用方式, backref参数则对关系提供反向引用的声明。 在最新版本的sqlalchemy中对relationship引进了back_populates参数, 两个参数的效果完全一致。 backref 和 back_populates 两个参数的区别 backref 只需要在 Parent 类中声明 children,Child.parent 会被动态创建。 back_populates 必须在两个类中显式地使用 bac
上海-悠悠
2022/07/19
2.7K0
flask-sqlalchemy 一对一,一对多,多对多操作
先进行如下操作: from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app=Flask(__name__) db=SQLAlchemy(app) 一对多: class Parent(db.Model):     id=db.Column(db.Integer,primary_key=True)     name=db.Column(db.String(30),unique=True)     children=db.re
用户1214487
2018/04/17
3.6K0
SqlAlchemy 2.0 中文文档(十四)
relationship() 函数定义了两个类之间的链接。当链接定义了一对多或多对多的关系时,在加载和操作对象时,它被表示为 Python 集合。本节介绍了有关集合配置和技术的其他信息。
ApacheCN_飞龙
2024/06/26
2510
SqlAlchemy 2.0 中文文档(七)
SQLAlchemy 从 2.0 版本开始具有“本地数据类”集成,在带注释的声明表映射中,可以通过向映射类添加单个 mixin 或装饰器将其转换为 Python dataclass。
ApacheCN_飞龙
2024/06/26
5520
flask数据操纵
在Django框架中内部已经提供ORM这样的框架,来实现对象关系映射,方便我们操作数据库。如果想在Flask中也达到这样效果,需要安装一个第三方来支持。 SQLAlchemy是一个关系型数据库框架,它提供了高层的ORM和底层的原生数据库的操作。flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。
py3study
2020/01/15
1.3K0
python学习笔记SQLAlchemy
ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射。简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库中的表或者表中的一条记录就可以直接通过操作类或者类实例来完成。
py3study
2020/01/09
3.2K0
SQLAlchemy 定义关系
数据库中的数据表可以看做是现实世界中一类事物的抽象,而表中的每一行数据都可以看做是一个实例「即现实世界的实体」。在现实世界中每个事物/实体都不是单独不是单独存在的,都与其他事物或实体存在或多或少的关联,对应在数据库中,数据表之间也存在着不同的关联,我们将这种关联称之为关系。
keinYe
2019/08/01
6930
SqlAlchemy 2.0 中文文档(七十三)
本文描述了 SQLAlchemy 版本 1.2 和 SQLAlchemy 版本 1.3 之间的更改。
ApacheCN_飞龙
2024/08/26
2510
SqlAlchemy 2.0 中文文档(十五)
这是一种非常特殊的情况,其中 relationship()必须执行一个 INSERT 和一个第二个 UPDATE,以正确填充一行(反之亦然,为了删除而执行一个 UPDATE 和 DELETE,而不违反外键约束)。这两种用例是:
ApacheCN_飞龙
2024/06/26
2820
SqlAlchemy 2.0 中文文档(七十七)
本文档描述了 SQLAlchemy 版本 0.8 与版本 0.9 之间的变化,截至 2013 年 5 月,0.8 版本正在进行维护,而 0.9 版本在 2013 年 12 月 30 日首次发布。
ApacheCN_飞龙
2024/08/26
1590
相关推荐
SqlAlchemy 2.0 中文文档(十二)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验