【问题标题】:'Application Not Found' error while creating a SQLite database through Python Flask通过 Python Flask 创建 SQLite 数据库时出现“找不到应用程序”错误
【发布时间】:2019-04-10 08:31:41
【问题描述】:

我目前正在使用 Flask Web 框架通过 Python 处理应用程序的用户管理部分,我需要一些帮助来通过 SQLAlchemy 创建 SQLite 数据库。

这是我后端包中 __init__.py 文件中的一个 sn-p。

from flask_sqlalchemy import SQLAlchemy
from flask import Flask
from flask_bcrypt import Bcrypt
from flask_login import LoginManager
from flask_mail import Mail
from backend.config import Config

db = SQLAlchemy()
bcrypt = Bcrypt()
login_manager = LoginManager()
login_manager.login_view = 'login'
login_manager.login_message_category = 'info'
mail = Mail()

def create_app():
    app = Flask(__name__)
    app.config.from_object(Config)

    db.init_app(app)
    bcrypt.init_app(app)
    login_manager.init_app(app)
    mail.init_app(app)

    from backend.users.routes import users
    from backend.stats.routes import stats
    from backend.queues.routes import queues
    app.register_blueprint(users)
    app.register_blueprint(stats)
    app.register_blueprint(queues)

    return app

这是我的主 run.py 文件中的一个 sn-p。

from backend import create_app

app = create_app()

if __name__ == '__main__':
    app.run(host = '127.0.0.1', port = 80, debug = True)

应用程序的配置将 SQLALCHEMY_DATABASE_URI 称为“sqlite:///site.db”。

我尝试通过 app_context 推送应用。我已经尝试在其中创建数据库表(坦率地说,我已经尝试了我可以在互联网上找到的所有解决方法)。有没有人对我如何解决这个问题有任何建议(除了手动创建表——这样做确实有效,但这似乎不是一个长期的解决方案)。

作为一个简短的说明,这是我收到的错误。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Rachit Bhargava\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask_sqlalchemy\__init__.py", line 963, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')
  File "C:\Users\Rachit Bhargava\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask_sqlalchemy\__init__.py", line 940, in _execute_for_all_tables
    app = self.get_app(app)
  File "C:\Users\Rachit Bhargava\AppData\Local\Programs\Python\Python37-32\lib\site-packages\flask_sqlalchemy\__init__.py", line 912, in get_app
    'No application found. Either work inside a view function or push'
RuntimeError: No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.

【问题讨论】:

  • 尝试注释掉其中的部分内容,直到找到能证明问题的最小应用程序。
  • 您的意思是注释掉将应用程序引用到 bcrypt 和 login_manager 等对象的所有其他部分吗?
  • 从外观上看,您已经在 Python shell 中导入了 db 并尝试运行 db.create_all(),但没有应用程序上下文。换句话说,您提供的代码并不是实际导致错误的原因。看看stackoverflow.com/questions/19437883/… 是否提供和帮助。
  • 好吧,我以前试过,但它似乎不起作用。错误只是保持不变。
  • 看起来有很多事情可能与问题无关。在问题消失之前注释掉一些代码可以提供非常丰富的信息。它为您提供了一个更简单的示例来发布,这使人们更容易提供帮助。

标签: python sqlite flask sqlalchemy flask-sqlalchemy


【解决方案1】:

您需要向 SqlAlchemy 构造函数提供应用程序上下文。 from run import app db = SQLAlchemy(app)

【讨论】:

  • 不过是db.init_app(app)
  • 好吧,我是通过 db.init_app(app) 来做的。反过来做是个好主意,但可能需要我在 create_app 函数之外声明所有内容。
猜你喜欢
  • 2020-01-03
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 2017-11-20
  • 2022-06-11
  • 2013-10-13
  • 1970-01-01
  • 2021-03-26
相关资源
最近更新 更多