sharpek.net

moje trzy grosze

sqlalchemy, (outer) join i onclause

Czasem zdarza się że za pomocą sqlalchemy chcemy zrobić coś dziwnego np. stworzyć outerjoin definiując własną klauzulę ON.

Jeśli trafiłeś tutaj szukając sposobu jak rozwiązać błąd:
TypeError: unknown arguments: onclaus
to dobrze trafiłeś :)

Załóżmy że User i Adrress to nasze obiekty, a t_user i t_adress to definicje naszych table.

meta.Session.query(User).outerjoin(Adrress, onclause=t_user.c.id==t.adress.c.user).all()

Zapytanie zaprezentowane powyżej zwróci nam wspomniany już wyjątek. Aby zrobić to „dobrze”, powyższy outerjoin, należy zmodyfikować do takiej postaci:

meta.Session.query(User).outerjoin((Adrress, t_user.c.id==t.adress.c.user)).all()

Jeśli chcemy rozszerzyć klauzulę ON o jakiś dodatkowy warunek wystarczy zrobić tak:

from sqlalchemy import and_
meta.Session.query(User).outerjoin((Adrress, and_(t_user.c.id==t.adress.c.user, t.adress.c.home==True)).all()

Zapewne dla niektórych jest to oczywiste, ale dla mnie na samym początku nie było

 

Comments

No comments so far.

Leave a Reply

 
(will not be published)
 
 
 
 

Preview: