Я работаю с существующей схемой боевых данных в видеоигре, потому что мне приходится работать с данными, сгенерированными внешней программой. Эта схема технически несовместима с тем, как я хочу организовать данные, но в основном она работает.
Одна проблема, которая возникает 3 раза (пока), заключается в предоставлении пользователю большой таблицы данных для просмотра/поиска, чтобы начать просеивать доступные данные. Итак, я решил использовать единый общий способ создания таблицы данных и обработки AJAX-запросов на дополнительные данные для этой таблицы.
Проблема в том, что в одном из этих случаев данные извлекаются непосредственно из таблицы, а в другом фактически извлекаются сводные данные из таблицы. Например, схема определяет «Боец» или участника боя, но я хочу, чтобы система раскрывала понятие «Персонаж» или вещь, которая существует и участвует во многих боях. Таким образом, Character
будет Combatant
из нескольких разных Encounter
.
В основном есть два способа создать идею Персонажа из базы данных. Я могу либо использовать представление, либо мой ORM (SQLAlchemy) каждый раз создавать требуемый запрос с нуля. Поддержка представлений возможна в SQLAlchemy через некоторые возможные расширения, но я подводя итог, я теряю первичный ключ и поэтому не могу создать класс ORM, представляющий представление. Предположительно, вы можете заставить столбец быть первичным ключом, но у меня это не сработало (казалось, ничего не делало). Если я попытаюсь использовать запрос с нуля, мой текущий способ создания общей таблицы не работает из-за отсутствия возможности проверить (...) результат запроса.
Итак, у меня есть два вопроса и MCVE для подхода "запрос с нуля":
Я использую подход к этой проблеме, который известен как плохой?
Есть ли способ избежать использования inspect(...), который позволяет мне использовать произвольные строки для получения значений из объекта результата запроса?
Некоторые примечания о MCVE:
Я сократил количество объектов ORM, столбцов в каждом и информацию о конфигурации в списках столбцов. Списки столбцов уродливы в своем первоначальном виде.
Там, где в MCVE находятся двойные вложенные циклы
for
, в моем реальном коде есть система шаблонов. Веб-сервер, генерация HTML, все обычные развлечения были убраны, чтобы сосредоточиться на SQLAlchemy.