首先,我正在关注此处发布的 Python Flask 教程:https://scotch.io/tutorials/build-a-crud-web-app-with-python-and-flask-part-one。
一切都很顺利,直到“迁移”部分执行:
$ flask db init
...失败并出现以下错误:
Usage: flask db init [OPTIONS]
Error: The file/path provided (run) does not appear to exist. Please verify the path is correct. If app is not on PYTHONPATH, ensure the extension is .py
我知道 $FLASK_APP 环境变量已设置,因为此命令执行良好:
$ flask run
任何人都可以建议为什么在运行应用程序时执行得很好,但在尝试创建迁移存储库时却执行得不好?
我能在其他地方找到的关于该主题的最接近的信息是:Flask 无法找到应用程序文件,但是使用
python -m
进行预挂起对我来说在任何情况下都不起作用。
就我而言,我必须这样做
python3 -m flask db init
不提python3 -m,它显示
zsh: command not found: flask
命令
flask run
成功启动了应用程序。
命令
flask db init
失败,并出现问题中报告的错误。
所以我尝试了
python run.py
,但未能通过报告models.py
中未满足的依赖关系来启动应用程序,这实际上是导入中的拼写错误。修复拼写错误并重新运行python run.py
成功了。
然后我又尝试了
flask run
,还是没问题。然后flask db init
...终于成功了。
报告的错误似乎无法找到
run.py
,这要么是误导,要么掩盖了它可以执行的真正根本原因。
就我而言,我的应用程序名称不同,在目录中,我有两个烧瓶应用程序
app.py
和app_async.py
我也遇到了相同的迁移密钥错误,所以这就是我解决它的方法:
FLASK_APP=app_async.py flask db init
这里我提到了应用程序名称,然后运行了命令。
这对我有用:
pip install flask-migrate --upgrade
我遇到了同样的问题,过了一段时间我注意到设置 FLASK_APP=my_app,但我有一个处理创建和初始化应用程序的函数,所以我更改了设置 FLASK_APP=my_app:crate_flask_app,最后它对我有用。 例如:在 my_app/init.py
migrate=Migrate()
db=Sqlalchemy()
defcreate_flask_app():
app=Flask(__name__)
db.init_app(app)
migrate.init_app(app,db)
return app
Windows 的解决方案是在声明 FLASK_APP 环境变量时,如果任何函数是创建应用程序的一部分,则应在冒号后给出该函数 i,e:set FLASK_APP:create_flask_app
问题是您没有正确调用命令。语法是,假设您使用工厂函数来与工厂模式保持一致:
flask --app module_name:factory_fn_name db init.
如果您不使用工厂模式,事情会简化为:
flask --app module_name db init
如果您使用应用程序工厂,那么您应该调用 init_app 就像在数据库实例上调用它一样。
from flask_migrate import Migrate
db = SQLAlchemy()
migrate = Migrate()
def create_app():
app = Flask(__name__)
db.init_app(app)
migrate.init_app(app, db)
return app
我遇到了完全相同的问题,但经过仔细检查,我得到了
migrate = Migrate(app)
而不是 migrate = Migrate(app, db)
。