我有一个使用Flask-SQLAlchemy的Flask应用程序,我正在尝试将其配置为使用Flask-Restless软件包使用多个数据库。
根据文档,配置模型以使用多个数据库__bind_key__似乎非常简单。
__bind_key__
但是,它似乎不适用于我。
我创建我的应用程序并初始化数据库,如下所示:
from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy SQLALCHEMY_DATABASE_URI = 'postgres://db_user:db_pw@localhost:5432/db_name' SQLALCHEMY_BINDS = { 'db1': SQLALCHEMY_DATABASE_URI, 'db2': 'mysql://db_user:db_pw@localhost:3306/db_name' } app = Flask(__name__) db = SQLALchemy(app)
然后定义包括在内的模型__bind_key__,这些模型应该告诉SQLAlchemy它需要使用哪个数据库:
class PostgresModel(db.Model): __tablename__ = 'postgres_model_table' __bind_key__ = 'db1' id = db.Column(db.Integer, primary_key=True) ... class MySQLModel(db.Model): __tablename__ = 'mysql_model_table' __bind_key__ = 'db2' id = db.Column(db.Integer, primary_key=True) ...
然后我像这样启动Flask-Restless:
manager = restless.APIManager(app, flask_sqlalchemy_db=db) manager.init_app(app, db) auth_func = lambda: is_authenticated(app) manager.create_api(PostgresModel, methods=['GET'], collection_name='postgres_model', authentication_required_for=['GET'], authentication_function=auth_func) manager.create_api(MySQLModel, methods=['GET'], collection_name='mysql_model', authentication_required_for=['GET'], authentication_function=auth_func)
该应用程序运行良好,当我点击时,我http://localhost:5000/api/postgres_model/[id]从Postgres DB中获得了对象的预期JSON响应(我猜这是因为我在SQLALCHEMY_DATABASE_URI中拥有凭据)。
http://localhost:5000/api/postgres_model/[id]
尽管当我点击时http://localhost:5000/api/mysql_model/[id],我得到一个mysql_model_table不存在的错误,表明它在Postgres数据库中查找,而不是MySQL中。
http://localhost:5000/api/mysql_model/[id]
mysql_model_table
我在这里做错了什么?
由于出现简单的错字,因此无法正常工作:
__bind_key = 'db1'
本来应该
__bind_key__ = 'db1'