В настоящее время я работаю над API Википедии, что означает, что у нас есть
база данных для каждого языка, который мы хотим использовать. Структура каждого
База данных идентична, они различаются только по своему языку. Единственный
место, где хранится эта информация, находится в имени базы данных.
При запуске с одного языка прямой подход к использованию
отображение между таблицами на необходимые классы (например, Page) выглядело хорошо.
Мы определили движок и соответствующие метаданные. Когда мы добавили
второй
База данных с собственной настройкой для движка и метаданных мы столкнулись с
следующая ошибка:
ArgumentError:
Class '<class 'wp.orm.types.pages.Page'>' already has a primary mapper defined.
Use non_primary=True to create a non primary Mapper.clear_mappers() will remove
*all* current mappers from all classes.
Я нашел письмо, в котором говорилось, что должен быть хотя бы один основной
mappe r, поэтому использование этой опции для всех баз данных не представляется возможным.
Следующая идея - использовать шардинг. Для этого нам нужен способ
различать
между базами данных с точки зрения экземпляра, как отмечалось в
документы :
"Вам нужна функция, которая может вернуть
один идентификатор шарда, данный экземпляр
быть спасенным; это называется
"Shard_chooser"
Я застрял здесь. Есть ли способ получить имя базы данных с учетом
объект
загружается из? Или возможность добавить статический атрибут на основе
двигатель? Альтернативой было бы добавить языковой столбец к каждому
стол, который просто уродлив.
Я наблюдаю за другими возможностями? Любые идеи, как определить несколько
картографы для одного и того же класса, которые сопоставляются с таблицами в разных
базы данных?