2016-04-01 12 views
-1

Beachten Sie, das ist für den Kern, nicht Orm.sqlachemy core: Wie geht man inner Join und multiple Joins

Hoffnung jemand mir mit diesen 2 Fragen helfen:

1) Es scheint outerjoin und schlicht join zu sein, aber wie eine innere Verknüpfung tut?

2) Wie lautet die Syntax für mehrere Joins? Ich war in der Lage, einen Join zu machen, aber nicht sicher die Syntax für mehrere Joins.

Mein 1. verbinden, die sieht aus wie das funktioniert:

select([...]).select_from(outerjoin(a, b)) 

aber es erzeugt einige Fehler für diese Syntax zwei Verknüpfungen zu tun:

select([...]).select_from(outerjoin(a, b).select_from(outerjoin(ma, tr)) 

Vielen Dank im Voraus.

Antwort

1
  1. join funktioniert INNER JOIN standardmäßig. outerjoin ruft join mit Argument isouter=True auf.

Wenn unsere gewünschte SQL-Abfrage

ist
SELECT a.col1, b.col2, c.col3 
FROM a 
LEFT JOIN b ON a.col1 = b.col1 
LEFT JOIN c ON c.col1 = b.col2 

Dann wird die sqlalchemy-Kernaussage sollte sein:

select(
    [a.c.col1, b.c.col2, c.c.col3] 
).select_from(
    a.outerjoin(
     b, a.c.col1 == b.c.col1 
    ).outerjoin(
     c, b.c.col2 == c.c.col1 
    ) 
) 
  • Die on clause ist nicht erforderlich, wenn die Beziehung definiert worden ist und nicht mehrdeutig.
  • Die outerjoin Funktionen können nicht verschachtelt als verkettete (wie Sie für die einfache getan haben, verbinden), das heißt

    outerjoin(outerjoin(a, b), c) 
    

    aber ich finde, dass Form weniger lesbar.