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

如何在SQLAlchemy python中实现表和列的自连接?

在SQLAlchemy中实现表和列的自连接,可以通过以下步骤进行:

  1. 首先,导入SQLAlchemy库和相关模块:from sqlalchemy import create_engine, Column, Integer, String, ForeignKey from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy.ext.declarative import declarative_base
  2. 创建数据库引擎和会话:engine = create_engine('数据库连接字符串') Session = sessionmaker(bind=engine) session = Session()
  3. 创建基础模型类:Base = declarative_base()
  4. 定义表模型类:class Table(Base): __tablename__ = 'table' id = Column(Integer, primary_key=True) name = Column(String(255)) parent_id = Column(Integer, ForeignKey('table.id')) children = relationship("Table", backref="parent", remote_side=[id])在上述代码中,Table类表示表模型,__tablename__属性指定表名,idnameparent_id分别表示表的列。parent_id是一个外键,指向同一表的id列。children属性定义了与自身的关联关系,通过relationship函数实现。
  5. 创建表:Base.metadata.create_all(engine)
  6. 进行自连接查询:result = session.query(Table).join(Table, Table.id == Table.parent_id).all()上述代码中,通过join方法实现表的自连接,Table.id == Table.parent_id表示连接条件,all()方法返回所有结果。

这样就实现了在SQLAlchemy中表和列的自连接。请注意,上述代码中的数据库连接字符串需要根据实际情况进行修改。另外,SQLAlchemy支持多种数据库后端,可以根据需要选择适合的数据库。

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

相关·内容

SqlAlchemy 2.0 中文文档(四)

每个属性名称对应于要成为数据库一部分。每个数据类型首先从与每个Mapped注释相关联 Python 数据类型获取;int用于INTEGER,str用于VARCHAR,等等。...在上面的示例,User.idAddress.id被标记为主键。 综合考虑,字符串名称以及声明列表组合在 SQLAlchemy 中被称为 table metadata。...一个映射类通常指的是一个特定数据库,其名称是通过使用__tablename__类级属性指示。 接下来,声明,通过添加包含一个特殊类型注释称为Mapped属性来实现。...在上面的示例,User.id Address.id 被标记为主键。 综合起来,SQLAlchemy 中一个字符串声明列表组合被称为 table metadata。...如何选择对象单独更多详细信息请参阅选择 ORM 实体。 使用 JOIN SELECT 在 SQL ,一次查询多个是非常常见,而 JOIN 关键字是实现这一目的主要方法。

2200

python约会之ORM——sqlalchemy

什么是ORM ORM:Object Relation Mapping,最初主要描述是程序Object对象关系型数据库Rlation关系()之间映射关系,目前来说也是描述程序对象和数据库数据记录之间映射关系统称...ORM框架处理性能是否支持事务、是否支持分布式等特性来进行确定使用哪个ORM框架进行操作,一般在python程序ORM操作都是对mysqldbpymysql这样底层模块进行封装处理。...例如文章要讲解sqlalchemy就是底层封装mysqldb实现,不过我们在使用过程需要使用pymysql进行替代。 3.1....连接会话 创建了数据库连接引擎对象之后,我们需要获取指定数据库之间连接,通过连接进行数据库数据增删改查操作,和数据库连接我们称之为指定数据库之间会话,通过指定一个模块 sqlalchemy.sessionmaker...确定和数据库某个数据之间关联关系,指定某类型为primary_key设定主键,其他就是通过Column指定自定义属性了。

1.6K10

SqlAlchemy 2.0 中文文档(十二)

另请参阅 此部分详细说明了引用关系版本。有关使用第二个作为关联引用关系,请参阅引用多对多关系部分。...SQLAlchemy 连接子查询急切加载在连接到相关项时在所有情况下使用别名表,因此与引用连接兼容。...然而,要使用引用关系进行急切加载,SQLAlchemy 需要告知应该连接/或查询多少级深度;否则,急切加载将根本不会发生。...SQLAlchemy 连接子查询急切加载在加入相关项时始终使用别名表,因此与引用连接兼容。...更好方法是使用 SQLAlchemy 混合属性功能,或者对于仅实例情况,使用 Python @property,其中可以实现一个根据当前 Python 实例生成用户定义集合。

2200

SqlAlchemy 2.0 中文文档(一)

映射类是我们想要创建任何 Python 类,然后它将具有链接到数据库属性。虽然有几种实现方式,但最常见风格称为 声明式,它允许我们一次声明我们用户定义类 Table 元数据。...对于简单数据类型且没有其他选项,我们可以单独指定Mapped类型注释,使用简单 Python 类型intstr表示IntegerString。...对于具有简单数据类型且没有其他选项,我们可以单独指定Mapped类型注释,使用简单 Python 类型intstr来表示IntegerString。...对于具有简单数据类型且没有其他选项,我们可以单独指示Mapped类型注释,使用简单 Python 类型,intstr,表示IntegerString。...如何在声明性映射过程解释 Python 类型定制非常开放;请参阅使用带注释声明性(对 mapped_column()类型注释形式)自定义类型映射章节了解背景信息。

3300

SqlAlchemy 2.0 中文文档(三十三)

dictlike.py - 将垂直映射为字典。 ## 继承映射配方 基本继承映射 单、联接具体表继承工作示例,映射类继承层次结构中所述。...关联包含一个“鉴别器”,用于确定每个关联行与哪种类型父对象相关联。 generic_fk.py - 展示了所谓“通用外键”,类似于流行框架( Django、ROR 等)做法。...关联包含一个“区分符”,用于确定哪种类型父对象与关联每个特定行关联。 generic_fk.py - 演示了所谓“通用外键”,类似于流行框架( Django,ROR 等)方式。...dictlike.py - 将垂直映射为字典。 继承映射配方 基本继承映射 单、联具体表继承工作示例,映射类继承层次结构中所述。...### 基本继承映射 作为 Mapping Class Inheritance Hierarchies 描述连接具体表继承工作示例。

2400

Flask_数据库

优点: 只需要面对对象编程,不需要面向数据库编写代码 对数据库操作转化为对类属性方法操作 不用编写各种数据库SQL语句 实现了数据模型与数据库解耦,屏蔽了不同数据库操作上差异 不在关注用是...Flaks-SQLAlchemy 安装配置 SQLALchemy 实际上是对数据库抽象,让开发者不用直接 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销同时,换来是开发效率较大提升...uselist 如果为False,不使用列表,而使用标量值 order_by 指定关系记录排序方式 secondary 指定多对多关系关系名字 secondary join 在SQLAlchemy...最基本查询是返回所有数据,可以通过过滤器进行更精确数据库查询....一方定义关系,多方定义外键 __tablename__ 定义名,如果未定义,默认创建同类名名 realtionship 描述了RoleUser关系,第一个参数为对应参照类名(一方类名

1.3K50

SqlAlchemy 2.0 中文文档(二十七)

Mapped最突出用途是在声明式映射形式Mapper配置,当显式使用时,它驱动 ORM 属性(mapped_class()relationship())配置。...1.4 版新功能。 从版本 1.4.48 更改为:2.0.18 请注意,由于实现错误,“flags”参数先前接受了 SQL 表达式对象,例如列表达式,除了普通 Python 字符串。...一些后端, PostgreSQL MariaDB,可能会将标志作为模式一部分来指定。 1.4 版新功能。...与标量一对多相比,将生成一个子句,比较父级目标与给定目标。 与标量多对多相比,关联别名也将被渲染,形成一个自然连接,作为查询主体一部分。...与标量一对多相比,将生成一个在父项中比较目标与给定目标的子句。 与标量多对多相比,关联别名也将被呈现,形成查询主体一部分自然连接

2300

Flask数据库

一 数据库设置 Web应用普遍使用是关系模型数据库,关系型数据库把所有的数据都存储在用来给应用实体建模,数是固定,行数是可变。它使用结构化查询语言。...SQLALchemy实际上是对数据库抽象,让开发者不用直接SQL语句打交道,而是通过Python对象来操作数据库,在舍弃一些性能开销同时,换来是开发效率较大提升。...数据库连接通过URL指定,而且程序使用数据库必须保存到Flask配置对象SQLALCHEMY_DATABASE_URI键。...无法自行决定时,指定多对多关系二级联结条件 二 自定义模型类 模型表示程序使用数据实体,在Flask-SQLAlchemy,模型一般是Python类,继承db.Model,db是SQLAlchemy...类属性对应数据库。id为主键,是由Flask-SQLAlchemy管理。db.Column类构造函数第一个参数是数据库模型属性类型。 如下示例:定义了两个模型类,用户和角色。 ?

3K20

SqlAlchemy 2.0 中文文档(五)

()功能,其中可以使用包含“模板”mapped_column()对象PEP 593 Annotated对象来指示完全构建参数集,目前尚未实现用于其他 ORM 构造,relationship()...- 适用于声明式 ### 对命令式表列应用加载、持久化映射选项 在为声明式映射设置加载持久化选项一节,讲述了如何在使用声明式配置时设置加载持久化选项时,使用 mapped_column()...FROM 子句(例如连接选择)情况也很重要。...目前尚未实现为其他 ORM 构造( relationship() composite())。...- 适用于声明式 为命令式表列应用加载、持久性映射选项 在设置声明性映射加载持久化选项一节,我们讨论了在使用声明性配置时如何设置加载持久化选项。

2100

Python3】Flask SQLAlchemy 操作Mysql数据库

SQLAlchemyPython一个ORM(对象关系映射)框架,可以让我们不需要写SQL语句就可以方便操作数据库,只要定义相关类,就可以生成对应,以及通过定义类就可以方便地对数据库进行增删改查操作...mysql,需要通过第三方驱动来连接,这里选择mysql-python。...context错误 db.init_app(app) # 初始化db db.create_all() # 创建所有未创建table 初始化工程: 在FlaskDemo.py文件:...,关键字为id, primary_key=True表示该数据作为主键, 类型为int,autoincrement=True增 name = db.Column(db.String(64), unique...或者命令行运行: python3 FlaskDemo 此时就会在flaskdb创建出users数据 六、使用数据库 插入数据: def insert(name, pwd): user = User

2.4K40

SqlAlchemy 2.0 中文文档(三十六)

新版本 1.4.0b2 :可以多次调用该方法以向返回表达式列表添加新条目。 给定列表达式集合应派生 INSERT、UPDATE 或 DELETE 目标。...,字符串连接更常见地使用 Python +运算符与字符串数据类型一起使用,这将呈现特定于后端连接运算符,例如: >>> print(select(literal("a") + "b")) SELECT...可能用例包括上面给出“materialized path”示例,以及利用特殊 SQL 函数来创建连接条件,几何函数。...请参阅 值函数 - 值函数作为标量 - 在 SQLAlchemy 统一教程 值函数 - 在 PostgreSQL 文档 FunctionElement.table_valued() attribute...,使用 Python +运算符与字符串数据类型更常见,这将呈现特定于后端连接运算符,例如: >>> print(select(literal("a") + "b")) SELECT :param

2800

SqlAlchemy 2.0 中文文档(十一)

“次要”参数进行延迟评估 邻接列表关系 复合邻接列表 引用查询策略 配置引用急加载 配置关系连接方式 处理多个连接路径 指定备用连接条件 创建自定义外键条件...在连接条件中使用自定义运算符 基于 SQL 函数自定义运算符 重叠外键 非关系比较 / 材料化路径 引用多对多关系 复合“次要”连接 与别名类关系...另请参阅 使用级联删除处理多对多关系 使用外键 ON DELETE 处理多对多关系 ## 关联对象 关联对象模式是一种与多对多模式相异变体:当一个关联包含除了与父子表(或左)是外键关系之外其他时...此评估可用完整命名空间包括为此声明基类映射所有类,以及sqlalchemy内容,包括表达式函数desc()sqlalchemy.sql.functions.func: class Parent...在这个评估可用完整命名空间包括为这个声明基类映射所有类,以及sqlalchemy内容,包括表达式函数desc()sqlalchemy.sql.functions.func: class Parent

1300

python数据库操作mysql:pymysql、sqlalchemy常见用法详解

,于是添加上 ---- 直接操作mysql–pymysql: 直接操作mysql意思是利用python实现类似命令行模式下mysql交互。...---- 使用sqlalchemy操作mysql: 介绍: ORM 将数据库与面向对象语言中类建立了一种对应关系,【ORM可以说是参照映射来处理数据模型,比如说:需要创建一个,可以定义一个类...插入 数据【这里仅针对使用declarative_base创建,对于不是程序才创建,可以自己使用declarative_base建一个类来映射之前,只要映射一致,就能插入数据】 1.连接数据库...,特别的标注哪个外键是哪个relationship relationshipsecondary用途:在多对多关系,填入值是中间,维持两边关系。...relationshipsecondary值是中间,负责维持中间与另外两关系,创建多对多核心是secondary #负责导入连接数据库对象 from sqlalchemy import

3.6K10

SqlAlchemy 2.0 中文文档(三)

为了描述如何在之间进行连接,这些方法要么根据元数据结构存在单个明确ForeignKeyConstraint对象推断出 ON 子句,该对象链接了这两个,要么我们可以提供一个明确 SQL 表达式构造...,使用一些复杂语法来自动将 address.user_id 与 user_account 关联起来。... address ,以便自动将 address.user_id 与 user_account 行关联起来。...为了描述如何在之间进行连接,这些方法要么**根据元数据结构链接两个单个明确 ForeignKeyConstraint 对象推断出 ON 子句,要么我们可以提供一个明确 SQL 表达式构造,...为了描述如何在之间进行连接,这些方法根据元数据结构链接两个单一明确ForeignKeyConstraint对象存在推断 ON 子句,或者我们可以提供一个明确 SQL 表达式构造来指示特定

2800

SqlAlchemy 2.0 中文文档(三十)

连接各个ForeignKeyConstraint对象将用于在类之间生成新双向relationship()对象。类关系遵循一个默认命名方案,我们可以自定义。...将连接各个 ForeignKeyConstraint 对象用于在类之间生成新双向 relationship() 对象。类关系遵循默认命名方案,我们可以自定义。...如果包含两个且仅两个ForeignKeyConstraint对象,并且此所有都是这两个ForeignKeyConstraint对象成员,则假定该是“次要”,并且不会直接映射。...缓存是通过存储lambda 对象本身引用来实现,以便构建缓存键;也就是说,Python 解释器将这些函数分配为 Python 标识,这决定了如何在后续运行识别查询。...缓存是通过存储lambda 对象本身引用来实现,以形成一个缓存键;也就是说,Python 解释器将这些函数分配给 Python 标识符,这决定了如何在后续运行识别查询。

2200

SqlAlchemy 2.0 中文文档(六)

这个功能也扩展到 relationship() 上指定其他参数,“主连接“排序”参数。有关详细信息,请参阅 Relationship 参数延迟评估 部分。...DefaultBase 类将使用一个 MetaData 作为注册,而继承 OtherBase 类将使用另一个注册。...提示 除了 mixin 类之外,还可以使用PEP 593 Annotated 类型共享许多类常见选项;请参阅将多种类型配置映射到 Python 类型将整个声明映射到 Python 类型以获取有关这些...## 使用混合基类进行映射继承模式 在处理映射类继承层次结构记录映射器继承模式时,当使用 declared_attr 时,可以使用一些附加功能,无论是与混合类一起使用,还是在类层次结构增加映射未映射超类时...MyModel LogRecord,在派生Base时,它们名都将根据其类名派生,一个名为id主键,以及由Base.

5500

SqlAlchemy 2.0 中文文档(二十)

SQL 相同,这意味着在 Python 从父对象获取适当状态而无需在呈现语句中渲染对父连接。...检查启用 ORM SELECT DML 语句中实体 select() 结构以及 insert()、update() delete() 结构( SQLAlchemy 1.4.33 起,...SQL 相同,这意味着适当状态从 Python 父对象获取,而不需要在渲染语句中渲染到父连接。...结果对象是 AliasedClass 一个实例。此对象实现了与原始映射类相同属性方法接口,允许 AliasedClass 兼容任何在原始类上工作属性技术,包括混合属性(参见混合属性)。...SQL 相同,这意味着在 Python 从父对象获取适当状态而无需在渲染语句中渲染到父连接

2200

flask数据操纵

Flask ORM 在Django框架内部已经提供ORM这样框架,来实现对象关系映射,方便我们操作数据库。如果想在Flask也达到这样效果,需要安装一个第三方来支持。...SQLAlchemy是一个关系型数据库框架,它提供了高层ORM底层原生数据库操作。flask-sqlalchemy是一个简化了SQLAlchemy操作flask扩展。...['SQLALCHEMY_ECHO'] = True # 管理app db = SQLAlchemy(app) 字段类型 类型 对应python 说明 Integer int 普通整数,一般是32位...日期时间 LargeBinary str 二进制文件 约束类型 选项 说明 primary_key 如果为True,代表表主键 unique 如果为True,代表这不允许出现重复值 index...如果为True,为这创建索引,提高查询效率 nullable 如果为True,允许有空值,如果为False,不允许有空值 default 为这定义默认值 关系类型 选项 说明 backref 在关系另一模型添加反向引用

1.3K10

SqlAlchemy 2.0 中文文档(二十一)

版本 2.0 起已弃用:此逻辑已弃用,将在 SQLAlchemy 2.0 删除。请参阅 使用 DISTINCT 与其他,但仅选择实体 了解 2.0 此用例描述。...= 'foo@bar.com') ) 版本 1.4 新功能。 连接子查询 加入目标也可以是任何或 SELECT 语句,它可能与目标实体相关或不相关。...提示文本将根据正在使用数据库后端在给定 Table 或 Alias 适当位置进行渲染。方言实现通常使用 Python 字符串替换语法,其中令牌 %(name)s 用于呈现或别名名称。...版本 2.0 起已弃用:此逻辑已弃用,并将在 SQLAlchemy 2.0 删除。请参阅仅选择实体时使用 DISTINCT 添加额外以获取 2.0 版此用例描述。...方言实现通常使用 Python 字符串替换语法,其中令牌 %(name)s 用于呈现或别名名称。

3200
领券