Вопрос
Если у меня есть существующий запрос для сущности, как я могу ограничиться, чтобы он возвращал только результаты подкласса polymorphi c этой сущности?
Подробности
Использование Сотрудник / Инженер / Менеджер из раздела Иерархии наследования классов отображения раздела документации sqlalchemy:
Представьте, что у меня есть сложный запрос, который я откуда-то получил и какое первоначальное определение я не хочу менять:
def get_complex_employee_query():
""" Super complex query """
query = session.query(Employee).filter(Employee.name.like('John %'))
[... imagine a bunch of other `.filter()`, `.join()` and/or `.options()` here ...]
return query
query = get_complex_query()
Я знаю, что могу отфильтровать запрос, чтобы получить список только инженеров, выполнив
query = query.filter(Employee.type='engineer')
Но предположим, что:
- существуют полиморфные c подклассы
Engineer
, - или что я не знаю / не волнуюсь о том, что
Employee
- это polymorphic_on
столбец type
, - или что я не знаю / мне небезразлично правильное значение для столбца
type
для фильтрации только для инженеров
Есть ли способ применить .filter()
, .options()
или какой-либо другой метод query
, который ограничит очередь попробуйте инженеры (и подклассы) без знания определенных c полей, которые конфигурируют наследование polymorphi c?
Я тоже в порядке с .join()
, пока я не знаю должен знать / заботиться о связях первичного / внешнего ключа между классами / таблицами, которые являются частью иерархии polymorphi c.
Короче говоря
Я бы хотел что-то вроде Model.relationship.of_type()
метод, но для запросов вместо отношений.
Есть ли такая вещь?