PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Die SQLAlchemy-Abfrage zeigt einen Fehler an. Tabelle/auswählbare „Workflows“ können nicht mit sich selbst verknüpft werden

Teil

.query(Workflow.user_id, func.count(Log.id))

fügt sowohl Workflow hinzu und Log zu deiner Anfrage. Das erste Modell wird als primärer Tisch markiert und andere werden als sekundär markiert. Wenn es keine Aufrufe von .join() gibt danach werden sowohl primäre als auch sekundäre Tabellen zum FROM hinzugefügt Klausel. Bei Aufrufen von .join() Es verschiebt die empfangene Tabelle in den JOIN Klausel. Wichtig ist hier, dass .join() kann nur auf die sekundäre Tabelle angewendet werden.

Das Problem ist, dass Ihr Aufruf an

.join(Workflow, Workflow.id == Log.workflow_id)

versucht, die primäre Tabelle als verbunden zu markieren. Um das Problem zu beheben, müssen Sie der sekundären Tabelle beitreten:

.join(Log, Workflow.id == Log.workflow_id)

Sie können echo=True hinzufügen , um von SQLAlchemy generiertes SQL anzuzeigen. Es ist wirklich praktisch, Ihre Abfragen zu debuggen. Oder Sie können kompilieren einzelne Abfrage, um generiertes SQL zu sehen.