跳转到主要内容

用于SQLAlchemy的数据库迁移工具。

项目描述

Alembic是由SQLAlchemy的作者编写的数据库迁移工具。迁移工具提供以下功能

  • 可以向数据库发出ALTER语句以更改表和其他结构

  • 提供了一种构造“迁移脚本”的系统;每个脚本都指示一系列步骤,可以将目标数据库升级到新版本,并可选地执行一系列反向步骤以降级

  • 允许脚本以某种顺序执行。

Alembic的目标是

  • 非常开放和透明的配置和操作。新Alembic环境是从一组模板中生成的,这些模板是在首次设置时从一组选项中选择的。然后,这些模板会放置一系列脚本,完全定义数据库连接的建立方式和迁移脚本如何调用;迁移脚本本身是从该系列脚本中的模板生成的。然后可以进一步自定义脚本,以定义与数据库交互的确切方式和新的迁移文件应采取的结构。

  • 完全支持事务 DDL。默认脚本确保所有迁移都在事务中发生 - 对于支持此功能的数据库(Postgresql,Microsoft SQL Server),迁移可以在失败时无需手动撤销更改的情况下进行测试。

  • 简约的脚本构建。基本操作,如重命名表/列、添加/删除列、更改列属性,可以通过一行命令如 alter_column()、rename_table()、add_constraint() 完成。对于这些简单的操作,无需重新创建完整的 SQLAlchemy 表结构 - 函数本身在幕后生成简约的架构结构以实现给定的 DDL 顺序。

  • “自动生成”迁移。虽然实际世界的迁移比自动确定的情况要复杂得多,但 Alembic 仍然可以消除从修改后的架构生成新迁移指令的初始工作量。使用 --autogenerate 功能将检查数据库的当前状态,使用 SQLAlchemy 的架构检查功能,将其与当前在 Python 中指定的数据库模型状态进行比较,并生成一系列“候选”迁移,将其转换为新的迁移脚本作为 Python 指令。然后,开发者编辑新文件,根据需要添加额外的指令和数据迁移,以生成完成的迁移。可以检测表和列级别的更改,以及后续的约束和索引。

  • 完全支持作为 SQL 脚本生成的迁移。我们知道,在企业环境中,直接访问生产数据库上的 DDL 命令是一种罕见的特权,而 DBA 希望得到文本 SQL 脚本。Alembic 的使用模型和命令旨在能够将一系列迁移运行到文本输出文件中,就像直接运行到数据库中一样容易。在此模式下,必须小心不要调用依赖于内存中行 SELECT 的其他操作 - Alembic 尝试提供帮助结构,如 bulk_insert(),以帮助与基于脚本的 DDL 兼容的数据导向操作。

  • 非线性、依赖图版本控制。脚本被赋予与 DVCS 类似的 UUID 标识符,一个脚本到另一个脚本的链接是通过脚本本身中可编辑的标记来实现的。一组迁移文件的结构被视为一个有向无环图,这意味着任何迁移文件都可以依赖于任意其他一组迁移文件,或者没有任何依赖。通过这个开放式的系统,迁移文件可以组织成分支、多个根和合并点,没有任何限制。提供命令以自动生成新的分支、根和分支合并。

  • 提供任何 SQLAlchemy 应用程序都可以使用的 ALTER 构造库。DDL 构造在 SQLAlchemy 自己的 DDLElement 基础之上构建,并且可以被任何应用程序或脚本独立使用。

  • 最后,将 SQLite 及其无法 ALTER 事物的能力纳入其中,但以一种使 SQLite 的非常特殊的作业流程需求得到明确满足的方式,充分利用这种糟糕情况,通过“批量”迁移的概念,其中多个对表的更改可以一起批量,形成一个对单个后续“移动和复制”工作流程的一系列指令。您甚至可以使用“移动和复制”工作流程来处理其他数据库,如果您想在繁忙的系统上在后台重新创建表。

Alembic 的文档和状态位于 https://alembic.sqlalchemy.org.cn/

SQLAlchemy 项目

Alembic 是 SQLAlchemy 项目 的一部分,并遵循核心项目的相同标准和约定。

开发/错误报告/拉取请求

请参阅 SQLAlchemy 社区指南 了解关于编码和参与此项目的指南。

行为准则

首先,SQLAlchemy非常重视用户和开发者之间礼貌、周到和建设性的沟通。请参阅我们的当前行为准则:行为准则

许可证

Alembic遵循MIT许可证

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分布

此版本没有提供源代码分布文件。请参阅生成分布存档的教程

构建分布

tiangolo_temp_alembic-1.4.3.dev0-py2.py3-none-any.whl (160.1 kB 查看散列值)

上传时间 Python 2 Python 3

由以下提供支持