python - 在 flask-sqlalchemy 中使用具有相同模型的多个数据库

标签 python mysql flask flask-sqlalchemy flask-restful

所以我有多个数据库。 DB_USDB_UK。它们具有完全相同的结构,但它们保存不同国家/地区的数据。我有一个带有 flask_restful 的 api。端点接受一个国家/地区以检索该特定国家/地区的数据。

我的问题是我不知道如何根据请求选择数据库。我已经阅读了绑定(bind)方法,但是您必须为每个模型指定一个 __bind_key 并且我的所有模型都在两个数据库中。

我已经尝试在 @before_request 中初始化数据库,但是您不能在第一个请求完成后调用 init_db 方法(或任何设置方法)已处理。

这是一个特殊情况,因为数据库是相同的,所以将它放在同一个数据库中似乎是有意义的,但它是更大系统的一部分,需要那样。

我如何根据每个请求选择数据库?

最佳答案

我遇到了同样的问题。我在这里描述了它 Using multiple POSTGRES databases and schemas with the same Flask-SQLAlchemy model

您的案例要容易一些,因为您不必处理架构差异。 您可以按照 stamaimer 的建议进行操作,但问题是为每个国家/地区创建了新的用户模型(如果您有超过 2 个,它就会变得困惑)。

为了修复它,我停止使用 flask-sqlAlchemy 数据库实例化方法,让内容提供者初始化方法处理选择哪个数据库:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

Session = sessionmaker()

class ContentProvider():

    db = None
    connection = None
    session = None

    def __init__(self, center):
        if center == UK:
            self.db = create_engine('sqlite://UK', echo=True, pool_threadlocal=True)
            self.connection = self.db.connect()
        elif center == US:
            self.db = create_engine('sqlite://US', echo=True, pool_threadlocal=True)
            self.connection = self.db.connect()
        self.session = Session(bind=self.connection)

    def index(country):
        user = models[country]["User"](username=country + str(time.time()))
        self.session.add(user)
        self.session.commit()
        return country, "added"

关于python - 在 flask-sqlalchemy 中使用具有相同模型的多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45675405/

相关文章:

python - 在python中访问时如何保留matlab结构?

Python 列表追加慢?

python - 使用plotly-dash上传文件

python - 如何在 app.post 中发送身份验证凭据以进行 API View 的 Flask 单元测试

python - 在生产环境中使用 Flask 编译 Coffeescript

python - 用于分析 Python 代码的峰值内存使用情况的模块

mysql - 带有内连接的 SQL 更新查询 : change to improve execution time

用于报告 : IF Record Does Not Exist, 的 MySQL 查询返回字段的 0 值

MYSQL - 每日总注册量

python - Flask-restful:连接sql server db时如何解析参数?