Python SQLAlchemy到不同数据库的动态连接

Python SQLAlchemy到不同数据库的动态连接,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,我将Python3.6与Flask和Flask SQLAlchemy一起使用,我有一个巨大的数据存储库,我已经决定将其按国家划分。每个数据库只保存一个国家的数据-但是,数据模式是相同的,所有查询等都是相同的 我需要在URL端点决定在哪个数据库上运行查询。目前,似乎没有明确的方法可以做到这一点,而且Flask SQLAlchemy提供的绑定功能似乎不符合要求,因此我决定(相当勉强地,“自己动手”) 这就是我到目前为止所做的: 版本信息 烧瓶==1.1.2 烧瓶迁移==2.5.3 炼金术==2.4.

我将Python3.6与Flask和Flask SQLAlchemy一起使用,我有一个巨大的数据存储库,我已经决定将其按国家划分。每个数据库只保存一个国家的数据-但是,数据模式是相同的,所有查询等都是相同的

我需要在URL端点决定在哪个数据库上运行查询。目前,似乎没有明确的方法可以做到这一点,而且Flask SQLAlchemy提供的绑定功能似乎不符合要求,因此我决定(相当勉强地,“自己动手”)

这就是我到目前为止所做的:

版本信息 烧瓶==1.1.2
烧瓶迁移==2.5.3
炼金术==2.4.4 SQLAlchemy==1.3.19

代码 定义如下:

可以选择声明要使用的绑定。None指的是默认绑定。 有关更多信息,请参阅多个数据库的绑定

这意味着如果未指定
\uu绑定\u键
,将使用默认数据库。但是,如果指定了,则它是对特定数据库的静态绑定

在我的用例中,即使我自动生成代码,也会让我重复相同的代码154次(我正在监视的154个国家)-绝对不是干巴巴的,而且容易出错


这不是我想要的。我希望能够使用相同的代码库,并能够根据查询参数动态切换数据库。

和Flask SQLAlchemy提供的绑定功能似乎不符合要求
——为什么?我没有使用过它,但据我所知,BIND正是您所需要的?@Kraay89我添加了一个部分,解决了您关于FSQLA绑定功能的问题。我显然没有仔细考虑我的评论。不过还是要感谢你的精心设计。恐怕对你有任何帮助都比我的薪水高。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)

my_pool = {}

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return '<User %r>' % self.username


@app.route('/foo/<id_param>')
def check_this_out(id_param):
    the_engine_options = grok(foo)
    if the_engine_options not in my_pool:
        the_engine = create_engine(the_engine_options) 
        my_pool[the_engine_options] = the_engine

    db.engine = my_pool[the_engine_options]

    return f"{User.query(id=id_param)}"        
class User(db.Model):
    __bind_key__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)