Flask app.py在pycharm中停止工作

时间:2018-06-16 15:56:29

标签: python flask sqlalchemy pycharm flask-sqlalchemy

我是烧瓶和pycharm的新手。基本上我写了一个休息webservice,最初PyCharm将它作为python脚本运行。一切都很好。但是在我实现了pycharm后,它会将app.py检测为烧瓶应用程序。

在app.py中本地启动应用程序的部分如下:

if __name__ == '__main__':
    from db import db

    db.init_app(app)

    if app.config['DEBUG']:
        @app.before_first_request
        def create_tables():
            db.create_all()

    app.run(port=5000)

问题是当我尝试运行app.py时似乎没有执行此部分。我还有run.py用于在Web服务器上通过uwsgi运行应用程序。 当我启动app.py时,这是 pycharm 的控制台输出:

FLASK_APP = app.py
FLASK_ENV = development
FLASK_DEBUG = 0
In folder /home/username/PycharmProjects/psychotest
/home/aydar/PycharmProjects/psychotest/venv/bin/python -m flask run
 * Serving Flask app "app.py"
 * Environment: development
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 

我已将打印语句添加到if __name__=='main'块中,这些块从不打印。似乎pycharm也会使用/home/username/PycharmProjects/psychotest/venv/bin/python -m flask run启动烧瓶。另外你可以看到DEBUG是假的,即使我在app.py的主体中明确地将debug设置为true,如下所示:

app = Flask(__name__)
app.config['DEBUG'] = True

只需python app.py即可通过终端完成所有工作。如何更改Pycharm的这种行为?这让我很烦,因为每当我尝试通过烧瓶从数据库中获取某些内容时,我都会收到sqlalchemy错误。错误示例:

    'The sqlalchemy extension was not registered to the current ' \
AssertionError: The sqlalchemy extension was not registered to the current application.  Please make sure to call init_app() first.

3 个答案:

答案 0 :(得分:2)

基于this回答,因为PyCharm将其检测为烧瓶应用,if __name__ == '__main__':块永远不会被击中,所以您可能希望将db.init_app(app)移到该块之外(进口也是)

答案 1 :(得分:0)

您可以编辑由Pycharm运行的配置。

您可以在右上角找到它。有一个选择框,您可以选择当前配置。

然后不要将-m flask run用作参数,而只使用app.py

答案 2 :(得分:0)

实际上我能够解决问题。虽然重新格式化app.py,即db.init_app()移出__name__=='__main__',但仍有效 - 但这对我来说并不理想。因为我已经设置了工作流程,而且我不想仅为PyCharm更改app.py的执行逻辑。

解决方案是在设置中禁用烧瓶集成 - >语言和框架。现在一切正常。