<class 'sqlalchemy.sql.schema.MetaData'>类的方法都有哪些

🤖 Assistant

以下是关于 SQLAlchemy 核心组件 MetaData 类的完整方法解析(基于 SQLAlchemy 1.4+/2.x 版本):


1. bind

  • 作用@property 装饰的属性,获取或设置绑定到该元数据的数据库引擎(Engine 实例)
  • 特性
  • 当设置 metadata.bind = engine 后,所有关联操作将自动使用该引擎
  • 管理数据库连接池的核心入口点
  • 使用场景
  engine = create_engine("sqlite://")
  metadata.bind = engine  # 绑定元数据到引擎

2. clear()

  • 作用:清空元数据中注册的所有表、关系、约束等元素
  • 警告
    • 会删除 metadata.tables 中所有内容
    • 不影响已创建的物理数据库结构
  • 重置场景
    metadata.reflect()  # 反射加载数据库结构
    metadata.clear()    # 清除元数据对象缓存
    

3. create_all(bind=None, tables=None, checkfirst=True)

  • 作用:创建元数据中注册的所有表结构
  • 参数
    • bind:可覆盖默认绑定引擎
    • tables:仅创建指定表(子集)
    • checkfirst:为 True 时仅创建不存在的表
  • 典型流程
    metadata.create_all()  # 自动按依赖顺序创建所有表
    

4. create_drop_stringify_dialect()

  • 作用:内部工具方法,生成用于 CREATE/DROP 语句的规范方言
  • 开发者用途:深度定制 DDL 生成规则时使用

5. dispatch

  • 作用:事件调度器实例(event.Dispatch 对象),用于处理DDL事件监听
  • 核心事件
    • before_create / after_create
    • before_drop / after_drop
  • 监听示例
    @event.listens_for(metadata, 'after_create')
    def receive_after_create(target, connection, **kw):
        print("数据库表结构已创建")
    

6. drop_all(bind=None, tables=None, checkfirst=True)

  • 作用:删除元数据中注册的所有表结构
  • 安全机制
    • 默认按依赖关系倒序删除(避免外键冲突)
    • checkfirst=True 时仅删除存在的表
  • 数据警告:将永久删除数据和表结构!

7. get_children()

  • 作用:返回元数据的所有子元素(表、序列等)
  • 继承体系:来自 SchemaItem,用于遍历数据库结构树
  • 输出[Table1>, <Table2>, ...] 列表

8. info

  • 作用:可自由扩展的字典属性,存储任意用户元数据
  • 使用场景
    metadata.info = {"version": "1.0", "author": "admin"}
    

9. is_bound

  • 作用:检查元数据是否已绑定数据库引擎的布尔属性
  • 快速检查
    if metadata.is_bound:
        print("已连接数据库")
    

10. naming_convention

  • 作用:设置约束的自动命名规则字典
  • SQL规范支持:解决未命名约束的跨数据库兼容问题
  • 标准配置
    metadata = MetaData(naming_convention={
        "ix": 'ix_%(column_0_label)s',
        "uq": "uq_%(table_name)s_%(column_0_name)s",
        "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
        "pk": "pk_%(table_name)s"
    })
    

11. reflect(bind=None, schema=None, **kw)

  • 作用:从数据库反射加载现有表结构到元数据
  • 核心参数
    • schema:指定数据库模式名(如 PostgreSQL 的 public
    • only:仅反射指定表名列表
  • 典型场景
    metadata.reflect(bind=engine)  # 将数据库结构加载到元数据对象
    users_table = metadata.tables['users']  # 获取已反射的表
    

12. remove(item)

  • 作用:从元数据中移除指定表或其它架构项
  • 示例
    metadata.remove(users_table)  # 从元数据解注册表
    

13. schema

  • 作用:元数据的默认模式名(相当于所有表的配置)
  • 互斥逻辑:表级 schema 参数优先于此设置
  • 跨数据库支持
    metadata = MetaData(schema="enterprise")
    

14. sorted_tables

  • 作用:返回按依赖排序的表列表(外键拓扑排序)
  • 关键规则
    • 父表在前(如 departments),子表在后(如 employees
    • 确保 create_all() 等操作无外键冲突
  • 可视化依赖
    for table in metadata.sorted_tables:
        print(table.name)  # 按正确顺序打印表名
    

15. tables

  • 作用:返回类似字典的 TableCollection 对象,包含所有注册表
  • 表访问
    users = metadata.tables['users']  # 按名称访问表对象
    
  • 动态注册
    Table('users', metadata, ...)  # 自动添加进 tables
    

体系关系图解

graph LR MetaData -->|包含| Tables MetaData -->|管理| Engine MetaData -->|事件| Dispatch Tables -->|依赖排序| sorted_tables Tables -->|反射来源| reflect Engine -->|绑定| create_all/drop_all

MetaData 是 SQLAlchemy 的数据库结构数据中心,负责协调表结构、关系、连接和 DDL 操作的核心元数据容器。

posted on 2025-08-20 18:38  痴心妄想  阅读(9)  评论(0)    收藏  举报

导航