概述

概述#

注意

本部分是 Alembic 内部 API 的技术概述。本部分仅对希望扩展 Alembic 功能的开发人员有用;对于普通用户来说,阅读本部分不是必需的

以下图形展示了 Alembic 内部主要功能的可视化效果。模块和类框未列出每个单元提供的全部操作;仅列出少量代表性元素,以传达每个系统的首要目的。

../_images/api_overview.png

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() 命令使用。自动生成是指 MigrationContextDefaultImpl,以便访问数据库连接并访问用于自动生成比较的每个后端规则。它还利用 内置操作对象 来表示它将呈现到脚本中的操作。