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

使用"select“作为关联表的sqlalchemy自引用多对多

SQLAlchemy是一个Python的SQL工具和对象关系映射(ORM)库,它提供了一种使用SQL语言进行数据库操作的方式。在SQLAlchemy中,可以使用select语句来执行查询操作。

自引用多对多关系是指一个表与自身存在多对多的关系。在SQLAlchemy中,可以使用relationship函数来定义自引用多对多关系。在这种关系中,通常需要使用一个关联表来存储两个实体之间的关联关系。

下面是使用select作为关联表的SQLAlchemy自引用多对多关系的示例代码:

代码语言:python
复制
from sqlalchemy import create_engine, Column, Integer, String, Table, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

association_table = Table('association', Base.metadata,
    Column('left_id', Integer, ForeignKey('entity.id')),
    Column('right_id', Integer, ForeignKey('entity.id'))
)

class Entity(Base):
    __tablename__ = 'entity'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    children = relationship('Entity',
                            secondary=association_table,
                            primaryjoin=id==association_table.c.left_id,
                            secondaryjoin=id==association_table.c.right_id,
                            backref='parents')

engine = create_engine('数据库连接字符串')

Base.metadata.create_all(engine)

在上述代码中,Entity类表示实体,通过relationship函数定义了childrenparents之间的多对多关系。association_table表示关联表,其中left_idright_id分别表示关联的两个实体的ID。

这种自引用多对多关系适用于一些场景,例如组织结构、社交网络中的好友关系等。

腾讯云提供了云数据库 TencentDB for MySQL,可以用于存储和管理数据。您可以使用腾讯云的云服务器 CVM 来运行您的应用程序,并使用腾讯云的云原生产品 Tencent Kubernetes Engine (TKE) 来部署和管理容器化应用。此外,腾讯云还提供了云安全产品、音视频处理服务、人工智能服务等,以满足不同场景下的需求。

更多关于腾讯云相关产品和产品介绍的信息,请访问腾讯云官方网站:https://cloud.tencent.com/

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

相关·内容

hibernate之关于使用连接实现关联映射

大家好,又见面了,我是全栈君 【Hibernate】之关于使用连接实现关联映射 在我们项目使用中採用中间最多一般就是一,或者是,当然一使用中间也是能够,可是这样几率通常少之又少...所以这里重点介绍一和一採用中间进行关联映射! 依旧採用Group和Person来描写叙述这个逻辑!...private String name; private Integer age; private Group group; @ManyToOne //以下是配置中间核心.../> 写这篇文章,我特意查询了一下网上文章...,发现大家都是採用XML配置,所以我这里也写了Annotations配置,由于JPA中Annotations使用起来远比XML要方便!

60420

SqlAlchemy 2.0 中文文档(十三)

对于集合批量更新和删除,为了使 UPDATE 或 DELETE 语句与父对象主键相关联关联必须明确地成为 UPDATE/DELETE 语句一部分,这要求后端包括非标准 SQL 语法支持...对于集合批量 UPDATE 和 DELETE,为了使 UPDATE 或 DELETE 语句与父对象主键相关联,必须显式地将关联包含在 UPDATE/DELETE 语句中,这要求后端要么包括非标准...对于引用多表关系,请使用普通批量插入技术来产生新对象,然后使用 AbstractCollectionWriter.add_all() 将其与集合关联起来。...对于批量更新和删除集合,为了使 UPDATE 或 DELETE 语句与父对象主键相关联关联必须明确地包含在 UPDATE/DELETE 语句中,这要求后端包含非标准 SQL 语法支持,或者在构建...对于引用多表关系,请使用普通批量插入技术来生成新对象,然后使用AbstractCollectionWriter.add_all()将它们与集合关联起来。

5410

SQLAlchemy 数据关联

对于使用 SQLAlchemy 建立数据之间关系前面的文章 SQLAlchemy 定义关系 已经进行了介绍,今天主要看单个数据之内关联。...数据多关系 数据关联多关系,典型就是父亲和子女关系。我们通过在引用父亲 id 来实现,然后通过反向链接来获取子女信息。...: user2followers: user1 user1followed: user2 user3 user1followed: user2 user3 user4 数据多关系 数据关联多关系实例那就更多了...在 SQLAlchemy关系需要借助于关系来实现,关联关系也同样需要关联,只是关联关联是同一个数据。...,需要通过 relationship 来建立关系,在两个数据多关系中,只需要指定 secondary 参数为关系即可,但是在关联关系 followerid 和 follwedid 指向是同一个数据

2.9K40

SqlAlchemy 2.0 中文文档(二十七)

与标量多相比,关联别名也将被渲染,形成一个自然连接,作为查询主体一部分。这对于超出简单 AND 比较查询不起作用,例如使用 OR 查询。...请使用显式连接、外连接或Comparator.has()进行更全面的非一标量成员测试。 在一个一上下文中与None进行比较会产生一个 NOT EXISTS 子句。...与标量多相比,关联别名也将被呈现,形成查询主体一部分自然连接。这不适用于超出简单 AND 比较查询,例如使用 OR 查询。...使用显式联接、外联接或 Comparator.has() 结合 not_() 进行更全面的非一标量成员测试。 在一情况下与 None 比较会产生 EXISTS 子句。...因此,Comparator.contains() 在与简单操作一起使用时非常有用。 对于操作,Comparator.contains() 行为有更多注意事项。

13710

SqlAlchemy 2.0 中文文档(十二)

另请参阅 此部分详细说明了引用关系版本。有关使用第二个作为关联引用关系,请参阅引用多关系部分。...参数指定引用关系非常重要。...另请参阅 邻接列表关系 - 单版本 引用查询策略 - 关于使用引用映射进行查询提示 配置引用急切加载 - 使用引用映射进行急切加载提示 ## 复合“次要”连接 注意 本节介绍了...参数指定引用关系非常重要。...另请参阅 邻接列表关系 - 单版本 引用查询策略 - 使用引用映射查询技巧 配置引用预加载 - 使用引用映射预加载技巧 复合“次要”连接 注意 本节涵盖了一些在某种程度上受

7910

SqlAlchemy 2.0 中文文档(十九)

user: Mapped[User] = relationship(lazy="joined") 连接预加载通常作为查询选项应用,而不是作为映射默认加载选项,特别是在用于集合而不是引用时。...Select IN 加载还支持多关系,其中它当前将跨越所有三个进行 JOIN,以将一侧行与另一侧行匹配。...注意 “unnested”标志不会影响从关联(例如,配置为relationship.secondary)到目标 JOIN;为了结果正确性,这些 JOIN 始终是 INNER JOIN,...user: Mapped[User] = relationship(lazy="joined") 连接式急加载通常作为查询选项应用,而不是作为映射默认加载选项,特别是当用于集合而不是引用时。...注意 “unnested”标志不会影响从关联(例如配置为relationship.secondary)到目标 JOIN 渲染;为了结果正确性,这些连接始终是 INNER ,因此如果连接到

11410

SqlAlchemy 2.0 中文文档(十五)

这两种用例是: 一个包含自身外键,而且单个行将具有指向其自身主键外键值。 两个都包含另一个外键引用,每个一行引用另一个另一行。...另请参阅 - “”关系参考示例。 引用多关系 - 在引用情况下使用具体细节。 配置多关系 - 在使用声明式时附加选项。...值包括: select - 当首次访问属性时,应该懒加载项目,使用一个单独 SELECT 语句,或者对于简单引用使用标识映射获取。...immediate - 项目应该在父项加载时加载,使用一个单独 SELECT 语句,或者对于简单引用使用标识映射获取。...primaryjoin – 将用作子对象与父对象之间主要连接 SQL 表达式,或者在多关系中将父对象连接到关联。默认情况下,此值基于父和子表(或关联外键关系计算。

8610

Flask数据库过滤器与查询集

SQLAlchemy无法自行决定时,指定多关系中二级联结条件 如果想为反向引用(backref)定义惰性(lazy)状态,可以使用**backref()**函数: class Person(db.Model...我们把tags和posts之间多关系转换成它们各自与关联connections之间两个一多关系。 查询这个多关系分为两步。...多关系可以在任何一个类中定义,backref参数会处理好关系另一侧。关联connections就是一个简单,不是模型,SQLAlchemy会自动接管这个。...引用关系 多关系在我们Web应用中可以用来实现用户之间关注,但是在上面的文章和标签例子中,关联连接是两个明确实体,而在用户关注其他用户时,都在users内,只有一个实体。...这种用户之间关注关系,我们依然可以使用上面的方法来实现。 高级多关系 引用多关系可在数据库中表示用户之间关注,但却有个限制。使用多关系时,往往需要存储所联两个实体之间额外信息。

6.8K10

SqlAlchemy 2.0 中文文档(三十八)

ForeignKey对象 - 这个结构定义了远程引用,并在定义外键中进行了全面描述。...metadata – 一个包含此MetaData对象。元数据用作将此与通过外键引用其他关联关联点。它还可以用于将此与特定Connection或Engine关联起来。...上述所有方法(大多数)共同之处是,有一种引用此备选方式,使用字符串名称。SQLAlchemy 将此名称称为模式名称。...在 SQLAlchemy 中,这只是一个与Table对象关联字符串名称,然后以适合于目标数据库方式呈现为 SQL 语句,从而在目标数据库上引用使用其远程“模式”。...最后,SQLAlchemy 还支持一个“动态”模式名称系统,通常用于租户应用程序,以便单个Table元数据集可以引用每个连接或语句基础上动态配置模式名称集。

10910

SqlAlchemy 2.0 中文文档(十一)

在声明后为映射类添加关系 使用“次要”参数进行延迟评估 邻接列表关系 复合邻接列表 引用查询策略 配置引用急加载 配置关系连接方式 处理多个连接路径...另请参阅 使用级联删除处理多关系 使用外键 ON DELETE 处理多关系 ## 关联对象 关联对象模式是一种与模式相异变体:当一个关联包含除了与父和子表(或左和右)是外键关系列之外其他列时...另请参阅 使用多关系级联删除 使用外键 ON DELETE 处理多关系 协会对象 协会对象模式是多关系一种变体:当一个关联包含除了那些与父和子表(或左和右外键不同额外列时,...有关此组合引入注意事项更详细背景,请参阅下一节将关联对象与访问模式组合使用。 将关联对象与访问模式结合使用 如前一节所述,关联对象模式不会自动与相同/列模式集成。...### 将关联对象与访问模式结合使用 如前所述,在上一节中,关联对象模式不会自动与同时针对相同/列使用模式集成。

8310

SqlAlchemy 2.0 中文文档(三十六)

如果指定了引用此INSERT语句SELECT语句,则该语句将与INSERT语句相关联。...如果指定了一个 SELECT 语句,该语句引用了此 INSERT 语句,那么该语句将与 INSERT 语句相关联。...(func.as_utc())) 从版本 1.3.13 开始:在对象“name”属性中使用quoted_name结构现在被识别为引用,因此可以强制函数名称进行引用或取消引用。...要强制名称进行引用或取消引用,请使用 quoted_name 结构: from sqlalchemy.sql import quoted_name class GeoBuffer(GenericFunction...(func.as_utc())) 从版本 1.3.13 开始:当与对象“name”属性一起使用时,quoted_name 结构现在被识别为引用,因此可以强制函数名称进行引用

13210

Python Web - Flask笔记6

关系: 在sqlalchemy中,如果想要将两个模型映射成一关系,那么应该在父模型中,指定引用时候,要传递一个uselist=False这个参数进去。...关系: 关系需要通过一张中间来绑定他们之间关系。...先把两个需要做模型定义出来 使用Table定义一个中间,中间一般就是包含两个模型外键字段就可以了,并且让他们两个来作为一个“复合主键”。...在两个需要做模型中随便选择一个模型,定义一个relationship属性,来绑定三者之间关系,在使用relationship时候,需要传入一个secondary=中间。...在定义模型时候,可以不写__tablename__,那么flask_sqlalchemy会默认使用当前模型名字转换成小写来作为名字,并且如果这个模型名字使用了多个单词并且使用了驼峰命名法,那么会在多个单词之间使用下划线来进行连接

1.9K10

SqlAlchemy 2.0 中文文档(二十三)

要利用ON DELETE CASCADE外键与多结合使用,需要在关联上配置FOREIGN KEY指令。这些指令可以处理自动从关联中删除,但不能自动删除相关对象本身。...此行为整体主题称为“级联反向引用”,并代表了作为 SQLAlchemy 2.0 标准化行为变化。...要使用 ON DELETE CASCADE 外键与一起使用,必须在关联上配置 FOREIGN KEY 指令。这些指令可以处理自动从关联中删除,但不能自动删除相关对象本身。...### 使用删除级联处理多关系 cascade="all, delete" 选项与多关系同样有效,即使用 relationship.secondary 指示关联关系。...要利用ON DELETE CASCADE外键与多关系,必须在关联上配置FOREIGN KEY指令。 这些指令可以处理自动从关联中删除,但无法适应相关对象本身自动删除。

11610

SqlAlchemy 2.0 中文文档(三十)

此外,如果检测到是两个其他之间关联,则不会直接映射该,而是将其配置为两个引用映射之间多表。...由于我们正在检查 ForeignKeyConstraint 对应于来自直接映射类引用,因此关系将被设置为指向引用一关系;在引用类上将创建相应一个反向引用引用此类。...此外,如果检测到是两个其他之间关联,则不会直接映射,而是将其配置为两个引用映射之间多表。...由于我们正在检查ForeignKeyConstraint对应于从直接映射类引用,该关系将被设置为指向被引用一关系;在被引用类上将创建一个相应反向引用,指向该类。...Table引用两个(对于引用情况则为一个)外部会与它们将要映射到类匹配,如果有的话。

11410

SqlAlchemy 2.0 中文文档(三)

在 声明映射类 部分,映射类示例使用了一种称为 relationship() 构造。此构造定义了两个不同映射类之间链接,或者从一个映射类到它自身,后者称为引用关系。...类 关系,沿着 User.addresses 关系;user_account 一个特定行可能被 address 多行引用。...所有一多关系自然对应于另一个方向一关系,在本例中由Address.user指出。...使用一些复杂语法来自动将 address.user_id 列与 user_account 关联起来。...当许多对象都引用同一个相关对象时,例如每个引用同一个User许多Address对象时,SQL 将仅一次该User对象使用正常延迟加载。

11520

SqlAlchemy 2.0 中文文档(四)

使用此注册,一组映射器配置可以作为一个组进行最终确定,并且在特定注册类可以在配置过程中相互通过名称引用。...### 映射类、实例和映射器运行时内省 使用registry映射类也将包含一些所有映射共通属性: __mapper__属性将引用与该类相关联Mapper: mapper = User....无论使用何种映射样式, SQLAlchemy 1.4 起,所有 ORM 映射都源自一个名为registry单个对象,它是一组映射类注册。...使用此注册,一组映射配置可以作为一个组完成,并且在配置过程中,特定注册类可以通过名称相互引用。...### 映射类、实例和映射器运行时内省 使用 registry 映射类还将包含一些所有映射通用属性: __mapper__ 属性将引用与类相关联 Mapper: mapper = User.

9610
领券