我正在使用Python 3和Flask,同时使用flask-migrate(它使用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包)。
- 我希望通过操纵Flask设置来强制数据库名称以避免意外情况(因此它需要在调用它的脚本的同一线程/内存空间中运行)。
app
对象(使用app = Flask(__name__)
创建)具有cli
属性,但它需要一个上下文对象,并且感觉不是正确的工具。我期望类似于app.cli.invoke('db', 'upgrade')
等...
有没有关于如何从代码中调用Flask命令而无需子cli进程的建议?