Flask:更改"迁移"文件夹的位置

Aay*_*rki 6 python migration flask

我有我的Flask项目层次结构a

project
??? controllers
??? models
    ??? schema.py
Run Code Online (Sandbox Code Playgroud)

当我运行时python schema.py db init,migrations添加一个文件夹project而不是下models.我有一个__init__.py全部3个文件夹(为简洁起见,此处未显示).我想要migrations生成的文件夹models.我该怎么做?

Alo*_*onP 13

好吧..就像Oluwafemi所说,你可以在cli命令中将-d( - 目录)标志传递给你的经理脚本

python schema.py db init --directory models/migrations
Run Code Online (Sandbox Code Playgroud)

此解决方案的问题是每次输入db命令时都必须指定迁移路径,否则会出现以下错误:

alembic.util.exc.CommandError: Path doesn't exist: 'migrations'.  Please use the 'init' command to create a new scripts folder.
Run Code Online (Sandbox Code Playgroud)

配置迁移路径的更好方法是将directory参数传递给Migratemanage.py中的对象(或者在您的情况下为'schema.py').

例如:

import os
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand

from .application import app, db


MIGRATION_DIR = os.path.join('models', 'migrations')


migrate = Migrate(app, db, directory=MIGRATION_DIR)
manager = Manager(app)

manager.add_command('db', MigrateCommand)


if __name__ == '__main__':
    manager.run()
Run Code Online (Sandbox Code Playgroud)

此外,我建议您将所有命令接口功能从'schema.py'移动到应用程序根路径中的不同python脚本(例如'manager.py'),并在模型旁边创建迁移文件夹,而不是在其中.models文件夹不应包含除数据模型对象之外的任何内容!

希望它有用..


Olu*_*ule 5

您需要将目录选项传递给 init 命令。这可以是迁移目录的路径。默认设置为迁移。

python schema.py db init --directory models/migrations
Run Code Online (Sandbox Code Playgroud)

参考: