首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Flask-Restless配置Flask-SQLAlchemy以使用多个数据库

通过Flask-Restless配置Flask-SQLAlchemy以使用多个数据库
EN

Stack Overflow用户
提问于 2013-02-22 17:52:15
回答 1查看 17.1K关注 0票数 22

我有一个使用Flask-SQLAlchemy的Flask应用程序,我正在尝试通过Flask-Restless包将其配置为使用多个数据库。

根据the docs的说法,通过__bind_key__配置您的模型以使用多个数据库似乎非常简单。

然而,它似乎对我不起作用。

我创建我的应用程序并初始化数据库,如下所示:

代码语言:javascript
复制
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它需要使用哪个DB:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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/mysql_model/[id]时,我得到了一个mysql_model_table不存在的错误,表明它正在Postgres DB中查找,而不是在MySQL数据库中查找。

我在这里做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-22 23:32:49

这是因为一个简单的打字错误而不起作用:

代码语言:javascript
复制
__bind_key = 'db1'

应该是

代码语言:javascript
复制
__bind_key__ = 'db1'

我已经更新了原来的问题,并修复了拼写错误,以此为例说明如何为其他人工作。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15021292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档