跳转到主要内容

SQLAlchemy的数据库迁移工具。

项目描述

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

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

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

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

Alembic的目标是

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

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

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

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

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

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

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

  • 终于,将 SQLite 和其无法修改事物的特性纳入体系,但以这样一种方式,即通过“批量迁移”的概念,以显式的方式满足 SQLite 非常特殊的作业流程需求,最大限度地利用糟糕的情况。在“批量迁移”中,可以将对表的多处更改批量组合,形成一个单一的后续“移动和复制”作业指令序列。如果您想在不繁忙的系统上在后台重新创建表,甚至可以使用“移动和复制”作业流程用于其他数据库。

有关 Alembic 的文档和状态可在 https://alembic.sqlalchemy.org.cn/ 查找。

SQLAlchemy 项目

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

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

有关编码和参与此项目的指南,请参阅 SQLAlchemy 社区指南

行为准则

首先,SQLAlchemy 强调用户和开发者之间礼貌、深思熟虑和建设性的沟通。请参阅我们的当前行为准则 行为准则

许可证

Alembic 采用 MIT 许可证 发布。

项目详情


发布历史 发布通知 | RSS 源

下载文件

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

源分发

alembic-1.13.3.tar.gz (1.9 MB 查看哈希值)

上传时间

构建分发

alembic-1.13.3-py3-none-any.whl (233.2 kB 查看哈希值)

上传时间 Python 3

由以下组织支持