迁移

本文档介绍如何使用 Aerich 进行迁移。

你可以参阅 https://github.com/tortoise/aerich 了解更多详情。

快速入门

> aerich -h

Usage: aerich [OPTIONS] COMMAND [ARGS]...

Options:
  -c, --config TEXT  Config file.  [default: aerich.ini]
  --app TEXT         Tortoise-ORM app name.  [default: models]
  -n, --name TEXT    Name of section in .ini file to use for aerich config.
                     [default: aerich]
  -h, --help         Show this message and exit.

Commands:
  downgrade  Downgrade to specified version.
  heads      Show current available heads in migrate location.
  history    List all migrate items.
  init       Init config file and generate root migrate location.
  init-db    Generate schema and generate app migrate location.
  migrate    Generate migrate changes file.
  upgrade    Upgrade to latest version.

用法

首先需要将 aerich.models 添加到你的 Tortoise-ORM 配置中,例如

TORTOISE_ORM = {
    "connections": {"default": "mysql://root:123456@127.0.0.1:3306/test"},
    "apps": {
        "models": {
            "models": ["tests.models", "aerich.models"],
            "default_connection": "default",
        },
    },
}

初始化

> aerich init -h

Usage: aerich init [OPTIONS]

  Init config file and generate root migrate location.

Options:
  -t, --tortoise-orm TEXT  Tortoise-ORM config module dict variable, like settings.TORTOISE_ORM.
                           [required]
  --location TEXT          Migrate store location.  [default: ./migrations]
  -h, --help               Show this message and exit.

初始化配置文件和位置

> aerich init -t tests.backends.mysql.TORTOISE_ORM

Success create migrate location ./migrations
Success generate config file aerich.ini

初始化数据库

> aerich init-db

Success create app migrate location ./migrations/models
Success generate schema for app "models"

如果你的 Tortoise-ORM 应用程序不是默认的 models,则必须指定 –app,例如 aerich –app other_models init-db

更新模型并进行迁移

> aerich migrate --name drop_column

Success migrate 1_202029051520102929_drop_column.json

迁移文件名的格式为 {version_num}_{datetime}_{name|update}.json

如果 aerich 猜测你正在重命名列,它将询问 将 {old_column} 重命名为 {new_column} [True],你可以选择 True 在不删除列的情况下重命名列,或选择 False 删除列然后创建。

如果你使用 MySQL,只有 MySQL8.0+ 支持 rename..to 语法。

升级到最新版本

> aerich upgrade

Success upgrade 1_202029051520102929_drop_column.json

现在你的数据库已迁移到最新版本。

降级到指定版本

> aerich init -h

Usage: aerich downgrade [OPTIONS]

  Downgrade to specified version.

Options:
  -v, --version INTEGER  Specified version, default to last.  [default: -1]
  -h, --help             Show this message and exit.
> aerich downgrade

Success downgrade 1_202029051520102929_drop_column.json

现在你的数据库已回滚到指定版本。

显示历史记录

> aerich history

1_202029051520102929_drop_column.json

显示待迁移的头

> aerich heads

1_202029051520102929_drop_column.json