Создайте сущность путем суммирования данных в SqlAlchemy.

Я работаю с существующей схемой боевых данных в видеоигре, потому что мне приходится работать с данными, сгенерированными внешней программой. Эта схема технически несовместима с тем, как я хочу организовать данные, но в основном она работает.

Одна проблема, которая возникает 3 раза (пока), заключается в предоставлении пользователю большой таблицы данных для просмотра/поиска, чтобы начать просеивать доступные данные. Итак, я решил использовать единый общий способ создания таблицы данных и обработки AJAX-запросов на дополнительные данные для этой таблицы.

Проблема в том, что в одном из этих случаев данные извлекаются непосредственно из таблицы, а в другом фактически извлекаются сводные данные из таблицы. Например, схема определяет «Боец» или участника боя, но я хочу, чтобы система раскрывала понятие «Персонаж» или вещь, которая существует и участвует во многих боях. Таким образом, Character будет Combatant из нескольких разных Encounter.

В основном есть два способа создать идею Персонажа из базы данных. Я могу либо использовать представление, либо мой ORM (SQLAlchemy) каждый раз создавать требуемый запрос с нуля. Поддержка представлений возможна в SQLAlchemy через некоторые возможные расширения, но я подводя итог, я теряю первичный ключ и поэтому не могу создать класс ORM, представляющий представление. Предположительно, вы можете заставить столбец быть первичным ключом, но у меня это не сработало (казалось, ничего не делало). Если я попытаюсь использовать запрос с нуля, мой текущий способ создания общей таблицы не работает из-за отсутствия возможности проверить (...) результат запроса.

Итак, у меня есть два вопроса и MCVE для подхода "запрос с нуля":

  1. Я использую подход к этой проблеме, который известен как плохой?

  2. Есть ли способ избежать использования inspect(...), который позволяет мне использовать произвольные строки для получения значений из объекта результата запроса?

Некоторые примечания о MCVE:

  • Я сократил количество объектов ORM, столбцов в каждом и информацию о конфигурации в списках столбцов. Списки столбцов уродливы в своем первоначальном виде.

  • Там, где в MCVE находятся двойные вложенные циклы for, в моем реальном коде есть система шаблонов. Веб-сервер, генерация HTML, все обычные развлечения были убраны, чтобы сосредоточиться на SQLAlchemy.


person xenrelay    schedule 23.01.2017    source источник


Ответы (1)


Я решил эту проблему, используя этот код для материализованных представлений. Итак, вся агрегация выполняется БД, а SQLAlchemy просто обрабатывает представление как еще одно выбираемое.

person xenrelay    schedule 05.02.2017