【发布时间】:2016-01-17 21:28:13
【问题描述】:
我有一个如下所示的烧瓶应用:
myapp
-- application.py
-- models.py
-- queries.py
-- routes.py
-- settings.py
application.py 看起来像这样:
from flask import Flask
from myapp import routes
def create_app(config_object):
app = Flask(__name__)
app.config.from_object(config_object)
app.register_blueprint(routes.main)
return app
queries.py 看起来像这样
from myapp.models import User
class QueryConnection(DATABASE_URI):
self.engine = create_engine(DATABASE_URI)
self.session = sessionmaker(bind=self.engine)
self.Session = self.session()
def get_all_users(self):
return self.Session.query(User).all()
routes.py 看起来像这样:
from flask import current_app, Blueprint, render_template
from myapp import queries
main = Blueprint('main', __name__, url_prefix='/')
query_connection = queries.QueryConnection(current_app.config['DATABASE_URI'])
@main.route("/")
def index():
return render_template('index.jinja2', list=query_connection.get_all_users())
models.py 看起来像这样:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
我想在 routes.py 中获取 current_app.config['DATABASE_URI'] 以便查询数据库,但我不知道如何将应用程序上下文从 application.py 传递给 queries.py。我尝试在 application.py 中使用它
with app.app_context():
app.register_blueprint(main)
但我收到“在应用程序上下文之外工作”错误。其他任何东西都会给出同样的错误。
我想将查询封装在它自己的类中,这样我就可以在不同的上下文中传递数据库 uri,比如在测试中。
【问题讨论】: