gpt4 book ai didi

flask-sqlalchemy - flask 蓝图 : RuntimeError Application not registered on db

转载 作者:行者123 更新时间:2023-12-03 17:33:00 25 4
gpt4 key购买 nike

我已经为此工作了几个小时,但恐怕我仍然不了解 flask 应用程序上下文以及我的应用程序应该如何使用蓝图实现。

我看过thisthis并尝试了一些不同的建议,但我的基本方法一定有问题。

我在以下 PJ 结构下有一个“主要”蓝图设置:

 project/
app/
main/
__init__.py
routes.py
forms.py
helper.py
admin/
static/
templates/
__init__.py
models.py

应用程序/ 初始化 .py:
from flask import Flask
from config import config

from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.bootstrap import Bootstrap

db = SQLAlchemy()
bootstrap = Bootstrap()


def create_app(config_version='default'):
app = Flask(__name__)
app.config.from_object(config[config_version])
bootstrap.init_app(app)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)

db.init_app(app)

return app

应用程序/main/ 初始化 .py
from flask import Blueprint
main = Blueprint('main',__name__)

from . import routes, helper

应用程序/主/helper.py
#!/usr/bin/env python
from . import main
from ..models import SKU, Category, db
from flask import current_app


def get_categories():
cat_list = []
for cat in db.session.query(Category).all():
cat_list.append((cat.id,cat.category))
return cat_list

在我创建 get_categories 之前一切正常 helpers.py中的函数为 app/main/forms.py 中的选择表单拉取动态列表。然而,当我启动 WSGI 时,我得到了这个错误:
RuntimeError: application not registered on db instance and no application bound to current context 

它会出现 db helper 中引用的内容与应用程序上下文无关,但是当我尝试在函数中创建一个时,它不起作用。

我做错了什么,在使用蓝图时是否有更好的方法来组织辅助函数?

最佳答案

Documentation on database contexts here here .

我的第一个想法是你没有调用 db.init_app(app) ,但已在评论中更正。

app/main/helper.py ,您正在通过 from ..models import SKU, Category, db 导入数据库.此数据库对象不会使用您创建的应用程序进行初始化。

我解决这个问题的方法是使用另一个文件 shared.py在根目录中。在该文件中,创建数据库对象,

from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()

在您的 app/init.py ,不要创建新的 db目的。相反,做
from shared import db
db.init_app(app)

在任何你想使用 db的地方对象,从 shared.py 导入.这样,共享文件中的对象将使用应用程序上下文进行初始化,并且没有机会循环导入(这是在应用程序创建之外使用 db 对象时可能遇到的问题之一文件)。

关于flask-sqlalchemy - flask 蓝图 : RuntimeError Application not registered on db,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26516939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com