Переключение баз данных в TG2 во время выполнения

Я делаю приложение, которое будет использовать несколько баз данных sqlite3, предварительно заполненных данными из внешнего приложения. Каждая база данных будет иметь одинаковые таблицы, но с разными данными.

Я хочу иметь возможность переключаться между этими базами данных в соответствии с пользовательским вводом. Какой самый элегантный способ сделать это в TurboGears 2?

3 ответа

Если ВСЕ базы данных имеют одинаковую схему, вы сможете создать несколько сеансов с использованием одной и той же модели для разных БД.

Я использую две базы данных для приложения только для чтения. Вторая база данных - это кэш на случай, если основная база данных не работает. Я использую два объекта для хранения соединения, метаданных и совместимых Table экземпляров. Верхняя часть функции просмотра назначает db = primary или же db = secondary а остальное просто запросы против db.tableA.join(db.tableB), Я не использую ORM.

Схемы не являются строго идентичными. Первичная база данных нуждается в schema. префикс (Table(...schema='schema')) и кеш базы данных нет. Чтобы обойти это, я создаю свои объекты таблицы в функции, которая принимает имя схемы в качестве аргумента. Вызывая функцию один раз для каждой базы данных, я получаю совместимые префиксы и префиксы Table объекты.

По крайней мере, в пилонах, SQLAlchemy meta.Session это ScopedSession, Приложения BaseController в appname/lib/base.py звонки Session.remove() после каждого запроса. Вероятно, лучше иметь один Session который обращается к обеим базам данных, но если вы этого не сделаете, вам может понадобиться изменить BaseController звонить .remove() на каждой Session,

Джелил,

Некоторое время назад я написал сообщение в блоге об использовании нескольких баз данных в TG2. Вы могли бы объединить этот метод с предложением Хорхе нескольких DBSessions, и я думаю, что вы могли бы сделать это легко.

Как использовать несколько баз данных в TurboGears 2.0

Надеюсь, это поможет, Сет

Другие вопросы по тегам