Část
.query(Workflow.user_id, func.count(Log.id))
přidá oba Workflow
a Log
na váš dotaz. První model je označen jako primární stůl a ostatní jsou označeny jako sekundární. Pokud neprobíhá žádná volání .join()
poté budou primární i sekundární tabulky přidány do FROM
doložka. Pokud existují volání .join()
přesune přijatou tabulku do JOIN
doložka. Zde je důležité, že .join()
lze použít pouze na sekundární tabulku.
Problém je v tom, že vaše volání na
.join(Workflow, Workflow.id == Log.workflow_id)
pokusí se označit primární tabulku jako spojenou. Chcete-li problém vyřešit, musíte se připojit k sekundárnímu stolu:
.join(Log, Workflow.id == Log.workflow_id)
Můžete přidat echo=True
zobrazit SQL generované SQLAlchemy. Je opravdu pohodlné ladit vaše dotazy. Nebo můžete kompilovat
jeden dotaz pro zobrazení vygenerovaného SQL.