首页
学习
活动
专区
工具
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 中文文档(五十一)

cx-Oracle python-oracledb 增行为 包含整数主键 SQLAlchemy Table 对象通常被假定具有“自动递增”行为,这意味着它们可以在插入时生成自己主键值。...Oracle 为主键创建一个隐式索引;此索引不包含在所有索引结果。 反映索引列表不会包括以 SYS_NC 开头列名。...使用 cx_Oracle SessionPool cx_Oracle 库提供了自己连接实现,可以用来替代 SQLAlchemy 连接池功能。...DBAPI python-oracledb 文档下载信息(适用)可在此处找到:oracle.github.io/python-oracledb/ 连接 连接字符串: oracle+oracledb...DBAPI python-oracledb 文档下载信息(适用)可在此处找到:oracle.github.io/python-oracledb/ 连接 连接字符串: oracle+oracledb

26210

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 关键字是实现这一目的主要方法。

26310
  • SqlAlchemy 2.0 中文文档(五十二)

    为了在 SQLAlchemy 顺利实现这种模式,主要数据类型应保持为 Integer,但是可以使用 TypeEngine.with_variant() 指定在 SQL Server 数据库中部署底层实现类型为...另请参阅 设置事务隔离级别,包括 DBAPI 自动提交 ## 临时 / 资源重置以用于连接SQLAlchemy Engine 对象使用 QueuePool 连接实现包括在连接返回池时调用 DBAPI...@dsn", supports_comments=False) 新版本 2.0 :增加了对 SQL Server 方言注释支持,包括 DDL 生成反射。...另请参阅 设置事务隔离级别,包括 DBAPI 自动提交 连接临时 / 资源重置 SQLAlchemy Engine 对象使用 QueuePool 连接实现包含 返回时重置 行为,当连接返回到池中时将调用...虽然此回滚会清除前一个事务使用即时状态,但它不涵盖更广泛范围会话级状态,包括临时以及其他服务器状态,准备好语句句柄语句缓存。

    51210

    SqlAlchemy 2.0 中文文档(八十)

    SQLAlchemy 版本 0.5 以来,可以创建自定义 DDL 字符串并将其与或元数据对象关联: from sqlalchemy.schema import DDL DDL("CREATE...例如,一组类通过连接继承与person表相关联,每个person_id都将其Class.person_id属性映射到personperson_id,而不是其子类。...在 0.5 ,已移除了此自动转换,因此实际上可以使用绑定来覆盖多态查询时发生转换;这使得Query能够在连接或具体表继承设置创建优化选择,以及可移植子查询等。...例如,一组通过连接继承到person类,每个person_id都将其Class.person_id属性映射到personperson_id,而不是其子类。...在 0.5 ,这种自动转换已被移除,因此实际上可以使用绑定来覆盖多态查询时发生转换;这使得Query能够在连接或具体表继承设置创建优化选择,以及可移植子查询等。

    18610

    SqlAlchemy 2.0 中文文档(五十)

    set_ – 一个字典或其他映射对象,其中键是目标列名称,或者是 Column 对象或其他 ORM 映射,匹配目标,值是表达式或文字,指定要采取 SET 操作。...要处理具有相同混合字符串/二进制数据 SQLite ,请使用一个将逐个检查每行自定义类型: from sqlalchemy import String from sqlalchemy import...然而,无论是隐式还是显式启用 SQLite 增特性,都要求类型名称正好是字符串"INTEGER"。...此属性提供了此行所有以供引用。 提示 Insert.excluded 属性是 ColumnCollection 一个实例,提供了与 访问 描述 Table.c 集合相同接口。...要处理具有相同混合字符串/二进制数据 SQLite ,请使用自定义类型逐个检查每一行: from sqlalchemy import String from sqlalchemy import

    31810

    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 实例生成用户定义集合。

    20710

    SqlAlchemy 2.0 中文文档(一)

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

    80710

    SqlAlchemy 2.0 中文文档(四十九)

    提示 Insert.inserted 属性是 ColumnCollection 实例,其提供了与 访问描述 Table.c 集合相同接口。...SSL 连接 PyMySQL DBAPI 接受与 MySQLdb 相同 SSL 参数,描述 SSL 连接。请参阅该部分以获取其他示例。...提示 Insert.inserted 属性是 ColumnCollection 实例,提供了与 访问 描述 Table.c 集合相同接口。...DBAPI mysqlclient(MySQL-Python 维护分支)文档下载信息(如果适用)可在此处找到:pypi.org/project/mysqlclient/ 连接 连接字符串: mysql...DBAPI mysqlclient(MySQL-Python 维护分支)文档下载信息(如果适用)可在以下链接找到:pypi.org/project/mysqlclient/ 连接 连接字符串:

    35310

    SqlAlchemy 2.0 中文文档(三十九)

    messages表格数据库信息,然后将生成Column、ForeignKey其他对象,这些对象对应于此信息,就像Table对象在 Python 手工构造一样。...Table 对象,表示视图“some_view”名称类型。...**kw – 传递给特定方言实现额外关键字参数。有关更多信息,请参阅正在使用方言文档。 返回: 一个字典,带有注释。 版本 1.2 新增。...为了适应这种使用情况,有一种技术,可以将这些供应商特定数据类型即时转换为 SQLAlchemy 后端不可知数据类型实例,例如上面的类型, Integer、Interval Enum。...在许多情况下,关系数据库报告元数据格式与 SQLAlchemy 中指定格式不同。从反射返回Table对象不能始终依赖于产生与原始 Python 定义Table对象相同 DDL。

    35510

    SqlAlchemy 2.0 中文文档(四十七)

    SQLAlchemy 事件钩子是用 Python 函数对象实现,因此事件通过 Python 函数调用进行传播。...SQLAlchemy 事件系统不实现任何进程间通信。可以实现使用 Python 进程间消息传递事件钩子,但这需要用户自己实现。...SQLAlchemy 事件钩子是通过 Python 函数对象实现,因此事件通过 Python 函数调用传播。...attribute inline_comments: bool = False 指示方言是否支持与定义内联注释 DDL。如果为 False,则意味着必须使用 ALTER 来设置注释。...attribute inline_comments: bool 表示方言支持与定义相一致内联注释 DDL。如果为 False,则意味着必须使用 ALTER 来设置注释。

    30210

    SqlAlchemy 2.0 中文文档(四十一)

    BaseDDLElement DDL 构造根,包括“创建其他流程子元素。...## 使用“大写”后端特定类型用于多个后端 检查“大写”“驼峰”类型存在自然会引出如何在使用特定后端时利用“大写”数据类型自然用例,但仅当该后端正在使用时。...SQLAlchemy ORM 要求映射主键必须以某种方式可排序。当使用不可排序枚举对象, Python 3 Enum 对象时,可以使用此参数为对象设置默认排序键函数。...SQLAlchemy ORM 要求映射主键必须以某种方式可排序。当使用不可排序枚举对象, Python 3 Enum 对象时,可以使用此参数为对象设置默认排序键函数。...我们将得到一个包含字典元组结构,其中字典本身无法作为“缓存字典”( SQLAlchemy 语句缓存)键使用,因为 Python 字典不可散: >>> # set cache_ok = True

    29210

    SqlAlchemy 2.0 中文文档(五十四)

    如何配置一个与 Python 保留字或类似的? 如何在给定映射类情况下获取所有、关系、映射属性等列表?...为了映射到特定SQLAlchemy ORM 需要至少有一个被标记为主键;当然,多,即复合主键,也是完全可行。这些不需要实际被数据库知道为主键,尽管最好是这样。...基于属性可以在映射中被赋予任何所需名称。请参阅明确命名声明式映射。 如何在给定一个映射类情况下获取所有、关系、映射属性等列表? 所有这些信息都可以从 Mapper 对象获得。...“急加载”通常意味着使用连接,以便跨多个加载结果集,而不是随着深度增加而增加查询次数(即 r + r*r2 + r*r2*r3 …) 对于更长期查询分析,或者实现应用程序端“慢查询”监视器,...急加载”时,通常意味着使用连接以便在一个结果集中加载多个结果,而不是随着深度增加而增加查询次数(即 r + r*r2 + r*r2*r3 …) 为了更长期地分析查询,或者实现应用程序端“慢查询”

    29710

    Flask_数据库

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

    1.3K50

    SqlAlchemy 2.0 中文文档(三十三)

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

    30410

    SqlAlchemy 2.0 中文文档(二十七)

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

    32310

    SqlAlchemy 2.0 中文文档(五)

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

    26310

    Flask数据库

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

    3K20
    领券