SQLAchemy '未找到应用程序。要么在视图函数中工作,要么推送'

Gen*_*eep 0 flask python-3.x flask-sqlalchemy

你好你好,

我在我面临的错误上发现了类似的问题,并尝试了提供的解决方案,但它对我不起作用。

我试图将我的模型分离到不同的目录中并将它们导入到 app.py 中

当我尝试将数据库导入 python 终端时,我发现找不到应用程序。

应用程序.py代码

from flask import Flask
from flask_restful import Resource, Api
# from flask_sqlalchemy import SQLAlchemy
from routes import test, root, user
from models.todo import db

app = Flask(__name__)
api = Api(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://username:pass123@localhost/db'
app.config['SECRET_KEY'] = 'thiskeyissecret'
# db.init_app(app)

with app.app_context():
    api = Api(app)
    db.init_app(app)




api.add_resource(root.HelloWorld, '/')
api.add_resource(test.Test, '/test')
api.add_resource(user.User, '/user')

if __name__ == '__main__':
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

楷模

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Todo(db.Model):
    __tablename__ = 'Todos'
    id = db.Column('id', db.Integer, primary_key=True)
    data = db.Column('data', db.Unicode)

    def __init__(self, id, data):
        self.id = id
        self.data = data

    def __repr__(self):
        return '<Todo %>' % self.id
Run Code Online (Sandbox Code Playgroud)

我的文件目录看起来像

主应用程序

  • 楷模
    • 托多.py
  • 路线
    • 一些路线
  • 应用程序.py

cod*_*ape 5

Flask-SQLAlchemy 需要一个活动的应用程序上下文。

\n\n

尝试:

\n\n
with app.app_context():\n    print(Todo.query.count())\n
Run Code Online (Sandbox Code Playgroud)\n\n

来自烧瓶文档

\n\n
\n

上下文的目的

\n\n

Flask 应用程序对象具有配置等属性,这些属性对于在视图和 CLI 命令中访问很有用。但是,在项目模块内导入应用实例很容易出现循环导入问题。使用应用工厂模式或编写可重用蓝图或扩展时,根本不会存在要导入的应用实例。

\n\n

Flask 通过应用程序上下文解决了这个问题。您可以使用 current_app 代理,而不是直接引用应用程序,该代理指向处理当前活动的应用程序。

\n\n

Flask 在处理请求时自动推送应用程序上下文。\n 查看函数、错误处理程序和在请求期间运行的其他函数将有权访问 current_app。

\n
\n