用于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第三方库


热门话题
ec2中tomcat脚本的java自动启动   java如何连接到3个不同的数据库并通过JDBC并行运行查询   eclipse如何解决SpringDataMaven构建的“生命周期配置未涵盖的插件执行”   java在长时间运行的线程完成之前显示Android布局?   数组在Java中向mongoDB插入ArrayList   java如何检查网站是否已更新并发送电子邮件?   javaxaomi杀死前台服务   将动态JSON值解析为Java对象   java在主机名中是否支持下划线?   java如何获取RTC工作项epic id并使用功能id对数据进行归档   java我如何告诉Maven捆绑依赖的JAR   java Slidepuzzle,切换图标   java应用程序小部件:当背景添加到外部布局时,列表项上的涟漪效应消失   java为什么是系统。nanoTime()返回这么大的数字,而这么长的时间还没有过去?   java JPA:实现模型层次结构@MappedSuperclass vs.继承