У меня есть веб-приложение multi-tenant Flask, которое взаимодействует с 1 "основной" базой MySQL (используется для поиска информации о клиенте) и десятками "клиент" базы данных MySQL (все они имеют одну и ту же схему).
В настоящее время я пытаюсь использовать SQLAlchemy вместе с расширением Flask-SQLAlchemy для взаимодействия с базами данных, но я изо всех сил стараюсь найти способ разрешить Модели, которые я определяю в своем приложении, чтобы динамически переключать контекст из одной клиентской базы данных в другую, в зависимости от клиента.
На сайт Flask-SQLAlchemy, простой пример показан в строках:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:[email protected]/db1'
db = SQLAlchemy(app)
class User(db.Model):
# Etc.
Единственная проблема - конфигурация SQLALCHEMY_DATABASE_URI
выполняется статически. Мне может потребоваться переключиться между mysql://username:[email protected]/db1
и mysql://username:[email protected]/db1
(или любым другим произвольным URI MySQL), в зависимости от того, какой клиент делает запрос.
Я нашел несколько похожих вопросов (см. ниже), но мне еще предстоит выяснить, как это сделать при использовании расширения Flask-SQLAlchemy.
С sqlalchemy как динамически привязываться к движку базы данных по каждому запросу
Установить флажок SQLAlchemy для динамического URI
Я также видел несколько примеров, которые были предоставлены для обработки оштукатуренных баз данных (что также должно применяться, поскольку базы данных по существу логически привязаны клиентом), но, опять же, ничего особенного для Flask-SQLAlchemy.
Если это имеет смысл, , я также открыт для непосредственного использования SQLAlchemy без расширения Flask-SQLAlchemy. Я новичок в SQLAlchemy - любая помощь будет принята с благодарностью!
Изменить. Возможность отображать схемы таблиц из базы данных будет бонусом.