当前,我正在尝试为公司创建一个内部应用程序,该应用程序将不同的用例捆绑到一个应用程序中。这也意味着每个用例可能会有不同的配置。
我决定用Blueprints组织Flask应用程序,SQL语句是用SQLAlchemy触发的,但是我不知道是如何为每个Blueprint使用不同的数据库将其传递给SQLAlchemy。还是在一个配置中将其与多个绑定一起使用的最佳方法?
请分享您的经验。
在此先谢谢Thomas,
答案 0 :(得分:0)
我玩了一会儿,为我找到了可行的解决方案。我将绑定用于特定于蓝图的数据库。
(对我来说)这是它的工作原理,即使有人可能对相同的问题感兴趣或在同一问题上挣扎。
./app/config.py
脚本中添加数据库配置class Config():
#Secret key
SECRET_KEY = 'you_never_know'
SQLALCHEMY_BINDS = {
'database': 'mysql+mysqlconnector://user:password@localhost/database'
}
SQLALCHEMY_TRACK_MODIFICATIONS = False
./app/__init__.py
中,请执行以下操作:from flask import Flask
from .config import Config
app = Flask(__name__)
app.config.from_object(Config)
with app.app_context():
from .somewhat_app import bp as somewhat_bp
app.register_blueprint(somewhat_bp)
./app//somewhat_app/__init__.py
:from flask import Blueprint
bp = Blueprint('somewhat', __name__, url_prefix='/somewhat')
from . import somewhat
./app/somewhat_app/somewhat.py
:from . import bp
from flask import (
render_template, request, url_for, jsonify, make_response
)
from flask import current_app as app
from .model import MyTable
@bp.route('/')
def index():
resp = MyTable.query.limit(20).all()
return render_template('somewhat/index.html', resp=resp)
./app/somewhat_app/model.py
:from flask import current_app as app
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
db.reflect(bind='database')
class MyTable(db.Model):
__bind_key__ = 'database'
__table__ = db.metadata.tables['mytable']