在 env.py 中动态设置 version_locations 以进行 alembic 迁移

问题描述 投票:0回答:1

我正在使用 alembic 来管理我的数据库更改。 其他人也可以向该数据库添加更改。 一切都设置正确,目前工作正常。
然而,因为我们要修改数据库很多,因此为每个修改创建新的 .py,所以我想将“version”文件夹从我的 github 存储库中移开,以避免淹没它。
然后,远程服务器就可以访问版本文件夹。
我们可以通过 sshfs 从本地计算机访问服务器,因此 Guy1 可能拥有 /mnt/myserver 的服务器,Guy2 可能拥有 /home/myserver 的服务器。

我希望能够将 version_locations 更改为

path_to_server/versions
。我没有设法使用 env.py 动态地做到这一点。关于如何做到这一点有任何想法吗?

到目前为止的计划是:

my_server_path = os.environ.get("my_server_path")
context.script.version_locations = f"{my_server_path}/versions"

我也尝试过

config.set_main_option("version_locations",f"{my_server_path}/versions")
并将 alembic.ini 中的
revision_environment
更改为 true 或 false,但也不起作用。

我最多有蒸馏器告诉我

FAILED: Multiple version locations present, please specify --version-path
,但是当一开始就应该只有一个路径时,指定路径是没有意义的。

database sqlalchemy migration alembic
1个回答
0
投票

其中一位维护者在here提到了下面的技巧,可以通过编程方式指定这一点。

env.py

from alembic import context
import os

script = context.script

def get_versions_path():
  try:
    versions_path = os.environ['ALEMBIC_VERSIONS_PATH']
  except KeyError:
    raise ValueError('You must specify a value for ALEMBIC_VERSIONS_PATH, which is the path to the /versions directory')

  if not os.path.isdir(versions_path):
    raise ValueError(f"ALEMBIC_VERSIONS_PATH of '{versions_path}' does not exist")

  return versions_path

script.__dict__.pop('_version_locations', None)
script.version_locations = [get_versions_path()]

随时根据您的喜好修改

get_versions_path

© www.soinside.com 2019 - 2024. All rights reserved.