概述#
注意
本部分是 Alembic 内部 API 的技术概述。本部分仅对希望扩展 Alembic 功能的开发人员有用;对于普通用户来说,阅读本部分不是必需的。
以下图形展示了 Alembic 内部主要功能的可视化效果。模块和类框未列出每个单元提供的全部操作;仅列出少量代表性元素,以传达每个系统的首要目的。
Alembic 的脚本运行器存在于 配置 模块中。此模块生成一个 Config
对象,并将其传递给 命令 中的相应函数。 命令 中的函数通常会实例化一个 ScriptDirectory
实例,该实例表示版本文件集合,以及一个 EnvironmentContext
,这是一个传递给环境的 env.py
脚本的配置外观。
EnvironmentContext
对象是 env.py
脚本中使用的主要对象,其主要目的是创建一个 MigrationContext
对象的立面,该对象是实际的迁移引擎,它引用数据库实现。在 env.py
脚本中对该对象调用的主要方法是 EnvironmentContext.configure()
方法,该方法使用数据库连接和行为配置设置 MigrationContext
。它还提供事务分界和迁移运行的方法,但这些方法最终调用已配置的 MigrationContext
。
MigrationContext
是应用程序其他部分访问数据库的网关,并生成一个 DefaultImpl
对象,该对象执行实际的数据库通信,并知道如何创建各种 DDL 指令(例如 ALTER TABLE)的特定 SQL 文本;DefaultImpl
具有按数据库后端划分的子类。在“脱机”模式(例如 --sql
)中,MigrationContext
会将 SQL 生成到文件输出流,而不是数据库。
在升级或降级操作期间,会调用一系列特定的迁移脚本,从 MigrationContext
开始,结合 ScriptDirectory
;实际脚本本身使用 Operations
对象,该对象为特定数据库操作提供最终用户界面。 Operations
对象是根据一系列“操作指令”对象生成的,这些对象可由用户扩展,并从 内置操作对象 模块中开始。
Alembic 的另一个突出特点是“自动生成”特性,它生成包含 Python 代码的新迁移脚本。自动生成特性从 自动生成 开始,并且当传递 --autogenerate
标志时,仅由 alembic.command.revision()
命令使用。自动生成是指 MigrationContext
和 DefaultImpl
,以便访问数据库连接并访问用于自动生成比较的每个后端规则。它还利用 内置操作对象 来表示它将呈现到脚本中的操作。