gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:24:27 28 4
gpt4 key购买 nike

所以我有多个数据库。 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com