że dwie tabele beard
i moustache
zdefiniowano poniżej:prawe sprzężenie zewnętrzne w SQLAlchemy
+--------+---------+------------+-------------+
| person | beardID | beardStyle | beardLength |
+--------+---------+------------+-------------+
+--------+-------------+----------------+
| person | moustacheID | moustacheStyle |
+--------+-------------+----------------+
Utworzono wysłania zapytania w PostgreSQL, które łączą te dwa stoły i generować następujące wyniki:
+--------+---------+------------+-------------+-------------+----------------+
| person | beardID | beardStyle | beardLength | moustacheID | moustacheStyle |
+--------+---------+------------+-------------+-------------+----------------+
| bob | 1 | rasputin | 1 | | |
+--------+---------+------------+-------------+-------------+----------------+
| bob | 2 | samson | 12 | | |
+--------+---------+------------+-------------+-------------+----------------+
| bob | | | | 1 | fu manchu |
+--------+---------+------------+-------------+-------------+----------------+
Zapytanie:
SELECT * FROM beards LEFT OUTER JOIN mustaches ON (false) WHERE person = "bob"
UNION ALL
SELECT * FROM beards b RIGHT OUTER JOIN mustaches ON (false) WHERE person = "bob"
Jednak nie mogę utworzyć reprezentacji SQLAlchemy. Próbowałem na kilka sposobów, od wykonania from_statement
do outerjoin
, ale żaden z nich naprawdę nie działał. Czy ktoś może mi w tym pomóc?
co to „ON” klauzuli oznaczać? –
nie wykonuje sprawdzenia dla implementacji 'join' –
Dlaczego chcesz, aby wynik był reprezentowany w tym formacie, zamiast klasy" Person "i dwóch relacji' Person.beards' i 'Person.mustashes'? Zasadniczo moje pytanie brzmi: dlaczego użyć 'sqlalchemy' do zrobienia czegoś tak' SQL'? Jeśli masz zdefiniowane relacje, możesz po prostu wydać 'session.query (Person) .options (linkedload ('beards')). Options (linkedload ('mustashes')). All()', a generowane zapytanie będzie bardzo podobnie, ale wynik byłby nadal instancją "Osoby", a nie "krotki". – van