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

alembic的Python项目详细描述


alembic是一个数据库迁移工具,由作者编写 共SQLAlchemy。迁移工具 提供以下功能:

  • 可以向数据库发出alter语句以更改 表和其他结构的结构
  • 提供一个可以构建“迁移脚本”的系统; 每个脚本都指示一系列特定的步骤,这些步骤可以“升级”一个 将数据库目标设置为新版本,并可选地执行一系列步骤,这些步骤可以 “降级”同样,反向执行同样的步骤。
  • 允许脚本以某种顺序执行。

Alembic的目标是:

  • 非常开放和透明的配置和操作。一个新的 alembic环境是从一组选定的模板生成的 在第一次安装时的一组选项中。然后模板将 一系列脚本,它们完全定义了如何建立数据库连接 以及如何调用迁移脚本;迁移脚本本身是 从该系列脚本中的模板生成。脚本可以 然后进一步定制以定义数据库将如何 与之交互以及新迁移文件应采用的结构。
  • 完全支持事务性ddl。默认脚本确保 迁移发生在事务中—对于那些支持 这个(postgresql,microsoft sql server),迁移可以在没有 失败时需要手动撤消更改。
  • 极简主义脚本结构。基本操作,如重命名 表/列,添加/删除列,更改列属性可以是 通过单行命令执行,如alter_column()、rename_table(), 添加约束()。不需要重新创建完整的sqlalchemy表 这些简单操作的结构-函数本身 在后台生成最小模式结构以实现给定的 DDL序列。
  • 迁移的“自动生成”。而现实世界的移民远不止这些 比自动确定的复杂,Alembic仍然可以 消除生成新迁移指令时的初始工作 从一个改变的模式。--autogenerate功能将检查 使用sqlalchemy模式检查的数据库的当前状态 功能,将其与数据库模型的当前状态进行比较 在python中指定,并生成一系列“候选”迁移, 将它们作为python指令呈现到新的迁移脚本中。这个 然后,开发人员编辑新文件,添加其他指令和数据 根据需要进行迁移,以生成完成的迁移。表和列 可以检测到级别更改,其约束和索引如下 好。
  • 完全支持作为SQL脚本生成的迁移。我们这些人 在公司环境中工作知道直接访问 生产数据库是一种罕见的特权,dba需要文本sql脚本。 Alembic的使用模型和命令的目标是能够运行 一系列迁移到文本输出文件中的过程与运行它们一样简单 直接到数据库。在这种模式下,必须注意不要调用其他 依赖内存中行选择的操作-alembic尝试 提供诸如bulk_insert()之类的帮助器构造,以帮助面向数据 与基于脚本的ddl兼容的操作。
  • 非线性,依赖关系图版本控制。脚本被赋予uuid 类似于dvcs的标识符,以及一个脚本到另一个脚本的链接 是通过脚本本身中的人类可编辑标记来实现的。 一组迁移文件的结构被认为是 有向无环图,意味着任何迁移文件都可以依赖于 在任何其他任意迁移文件集上,或在 全部。通过这个开放式系统,可以组织迁移文件 无限制地分成分支、多个根和合并点。 提供命令以生成新的分支、根和合并 自动分支。
  • 提供一个alter构造库,可以由任何sqlalchemy使用 申请。ddl构造基于sqlalchemy自己的ddlement基 并且可以由任何应用程序或脚本单独使用。
  • 最后,带上sqlite和它的不易改变的东西进入褶皱, 但是这样就满足了sqlite非常特殊的工作流需求 以一种明确的方式,使最坏的情况,通过 “批处理”迁移的概念,其中对表的多个更改可以 将一组指令组合在一起,形成一系列针对单个 “移动和复制”工作流。您甚至可以使用“移动和复制”工作流 其他数据库,如果要在后台重新创建表 在繁忙的系统上。

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我能知道文件的哪个条目正在被修改吗?   多线程Java并发线程   java抓取包含多个页面的多个字母标签的网站   为什么if语句不排除Java中的另一个if语句?   Java可序列化哈希映射到ByteArray以创建blob   JavaEclipseLombokBuilder添加新建议   java将文件路径数组转换为文件数组,并计算每个文件的大小   在Java8流中添加大小数   Bouncy Castle 1.46之前版本的java兼容性问题   无法在AWS设备场上运行安卓 Java Appium测试   java为什么不使用mavenwarplugin将键与“WEBINF/classes/METAINF/MANIFEST.MF”合并?   java如何在引用子类的成员时调用super()   找不到java TestFx无头MonoclePlatformFactory   java AbstractMethodError onClientSessionEvent和“缺少控制媒体的权限”   正则表达式如何使用JAVA在字符串的大写字母前插入空格?   我的Spring安全项目中的java BCrypt(Spring安全)   java在我的网站上查看小程序更新时遇到问题   java如何使用schedule方法