【发布时间】:2023-04-05 20:05:01
【问题描述】:
我正在使用 python 3 和烧瓶,使用烧瓶迁移(使用 alembic)来处理我的 SQL 迁移。当我运行本地集成测试时,我想每次都重建数据库,以便我可以针对我正在测试的每个 api 调用的干净数据库运行我的 API 调用(是的,我可以使用 sqlite,但我想检查约束是否正确)。
我可以在命令行上轻松地执行以下操作:
mysql -uroot -e 'drop database DBNAME; create database DBNAME;'
FLASK_APP=flask_app.py flask db upgrade
但我宁愿在 python 代码中运行它,原因有两个:
- 我不想担心安装在 CI 机器上的 mysql 客户端(最终)将运行此代码(它们应该只需要 python mysql 包)。
- 我想操纵烧瓶设置来强制数据库名称以避免意外(因此它需要与调用它的脚本在同一线程/内存空间中运行)。
app 对象(使用app = Flask(__name__) 创建)有一个cli 属性,但它需要一个上下文对象,而且感觉我使用的工具不正确。我期待app.cli.invoke('db', 'upgrade') 或类似的...
关于如何在没有子 cli 进程的情况下从代码调用烧瓶命令的任何建议?
【问题讨论】:
-
我认为this SO 帖子可以帮助你。
标签: python flask database-migration alembic flask-migrate