Ho due tabelle beard
e moustache
definito di seguito:right outer join in SQLAlchemy
+--------+---------+------------+-------------+
| person | beardID | beardStyle | beardLength |
+--------+---------+------------+-------------+
+--------+-------------+----------------+
| person | moustacheID | moustacheStyle |
+--------+-------------+----------------+
ho creato una query SQL in PostgreSQL che combinerà queste due tabelle e generare seguente risultato:
+--------+---------+------------+-------------+-------------+----------------+
| person | beardID | beardStyle | beardLength | moustacheID | moustacheStyle |
+--------+---------+------------+-------------+-------------+----------------+
| bob | 1 | rasputin | 1 | | |
+--------+---------+------------+-------------+-------------+----------------+
| bob | 2 | samson | 12 | | |
+--------+---------+------------+-------------+-------------+----------------+
| bob | | | | 1 | fu manchu |
+--------+---------+------------+-------------+-------------+----------------+
Query:
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"
Tuttavia non riesco a creare la rappresentazione SQLAlchemy di esso. Ho provato diversi modi dall'implementazione di from_statement
a outerjoin
ma nessuno di questi ha funzionato davvero. Qualcuno può aiutarmi con questo?
Che cosa significa che la clausola "ON" significare? –
non sta verificando l'implementazione di 'join' –
Perché vuoi che il risultato sia rappresentato in questo formato piuttosto che una classe' Person' e due relazioni 'Person.beards' e' Person.mustashes'? Fondamentalmente la mia domanda è: perché usare 'sqlalchemy' per fare qualcosa così' SQL'? Se hai definito delle relazioni, potresti semplicemente rilasciare 'session.query (Person) .options (joinload ('beards')). Options (joinload ('mustashes')). All()', e la query generata sarà molto simile, ma il risultato sarebbe ancora un'istanza di 'Persona' e non una' tupla'. – van