跳转到主要内容

数据库迁移工具

项目描述

dbupgrade

数据库迁移工具

Python MIT License GitHub pypi GitHub Actions

基本用法

用法: dbupgrade [OPTIONS] [-l API_LEVEL|-L] DBNAME SCHEMA DIRECTORY

使用SQL脚本从DIRECTORY升级指定为DBNAME的数据库中的SCHEMADIRECTORY将搜索所有具有.sql后缀的文件。这些文件是具有特殊标题部分的SQL脚本

-- Schema: my-db-schema
-- Version: 25
-- API-Level: 3
-- Dialect: postgres

CREATE TABLE ...

以下标题是必需的

  • 模式
    要更新的模式名称。
  • 方言
    此脚本的数据库方言。使用SQLAlchemy的数据库URL方案标识符,例如postgressqlite
  • 版本
    应用此脚本后的新模式版本。如果两个脚本具有相同的模式、方言和版本,则为错误。
  • API级别
    应用此脚本后的新模式API级别。对于给定模式,后续版本的API级别必须等于或比前一个版本的API级别高一级。例如,如果脚本版本44的API级别为3,则脚本版本45必须具有API级别3或4。
  • 事务 (可选)
    可能的值是 yes(默认)和 no。当此头为 yes 时,单个升级文件及其对应的版本升级语句将在单个事务中执行。否则,每个语句将单独执行。前者通常更可取,以便在脚本无法应用时,所有更改都将回滚,但在某些情况下后者是必需的。

数据库必须包含一个具有三个列 schemaversionapi_leveldb_config 表。如果此表不存在,则创建它。此表必须为给定模式包含恰好一行。如果此行不存在,则创建它,将版本和 api_level 初始值设置为 0。

从数据库请求模式当前版本和 API 级别,并按顺序应用所有版本号更高的脚本。如果缺少任何版本号,则脚本将在缺少版本号之前的最后一个版本后停止。

除非提供 -l-L 选项,否则只会应用不增加 API 级别的脚本。如果提供 -l 选项,则将应用所有达到指定 API 级别的脚本。-L 将应用不考虑 API 级别的所有脚本。

每个脚本都在单独的事务中执行。如果脚本失败,该脚本中的所有更改将被回滚,脚本将带错误信息和非零返回状态停止。

JSON 输出

当提供 --json 选项时,dbupgrade 将有关已应用脚本的 JSON 信息输出到标准输出。示例输出

{
  "success": true,
  "oldVersion": {
    "version": 123,
    "apiLevel": 15
  },
  "newVersion": {
    "version": 125,
    "apiLevel": 16
  },
  "appliedScripts": [
    {
      "filename": "0124-create-foo.sql",
      "version": 124,
      "apiLevel": 15
    },
    {
      "filename": "0125-delete-bar-sql",
      "version": 125,
      "apiLevel": 16
    }
  ],
  "failedScript": {
    "filename": "0126-change-stuff.sql",
    "version": 126,
    "apiLevel": 16
  }
}

success 如果所有脚本都已成功应用或没有要应用的脚本,则为 true。在这种情况下,不定义 failedScript 键。始终定义 appliedScripts 键。如果没有应用脚本,则它是一个空数组。

项目详情


下载文件

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

源分布

dbupgrade-2023.10.0.tar.gz (12.0 kB 查看散列)

上传时间

构建分布

dbupgrade-2023.10.0-py3-none-any.whl (14.1 kB 查看散列)

上传时间 Python 3

由以下提供支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面