Как объединить несколько таблиц в SQLAlchemy?
=============================================

У меня есть несколько разных таблиц уведомлений, и я хотел бы объединить их, чтобы показать пользователю все их уведомления. Тем не менее, профсоюз не работает как следует.

**Python code**

Использование: user.\_get\_notifications\_query (unsfirmed\_only = False) .all ()

**SQL generated**

**I expect something along these lines**

Кроме того, есть ли способ сортировать агрегированные результаты объединения из SQLAlchemy?

**EDIT**

Я должен упомянуть, что`sqlalchemy.sql.union()` производит правильный SQL, но я не знаю, как использовать это из ORM (возврат / подсчет записей).

Я не думаю, что это может работать с объединением, даже если предположить, что запрос был сгенерирован так, как вы ожидаете. Вы запрашиваете три разных типа объектов. Когда ORM возвращает строки из базы данных, я не вижу способа сопоставить строки с правильным классом.

В этом случае UNION не имеет большого смысла, поскольку третий столбец имеет разное значение во всех трех таблицах.

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



 можно объединить разные таблицы с помощью sqlalchemy, вам просто нужно указать, какие столбцы вы выбираете из каждой таблицы, чтобы их можно было правильно объединить. Скажем, у вас есть лица`A` а также`B`, сделай это:

В этом случае все, что вам нужно знать, это то, что если`A.someColumn` а также`B.someOtherColumn` не может быть приведен к тому же типу, ваши dbms могут взбеситься :)

Например, в «реальном мире» см. Строки 85, 87 и 90:

<https://gerrit.wikimedia.org/r/#/c/147312/4/wikimetrics/metrics/rolling_active_editor.py>

Это создает подзапрос двух разных таблиц, объединенных вместе. Этот подзапрос затем используется в соединении, и его столбцы доступны через`.c.column` по-прежнему.