Część
.query(Workflow.user_id, func.count(Log.id))
dodaje oba Workflow
i Log
na Twoje zapytanie. Pierwszy model jest oznaczony jako tabela podstawowa, a pozostałe jako drugorzędne. Jeśli nie ma wywołań .join()
potem do FROM
zostaną dodane zarówno tabele podstawowe, jak i dodatkowe klauzula. Jeśli istnieją wywołania .join()
przeniesie otrzymaną tabelę do JOIN
klauzula. Ważną rzeczą tutaj jest to, że .join()
można zastosować tylko do tabeli dodatkowej.
Problem polega na tym, że Twój telefon do
.join(Workflow, Workflow.id == Log.workflow_id)
próbuje oznaczyć tabelę podstawową jako połączoną. Aby rozwiązać problem, musisz dołączyć do drugiego stołu:
.join(Log, Workflow.id == Log.workflow_id)
Możesz dodać echo=True
aby zobaczyć SQL wygenerowany przez SQLAlchemy. Debugowanie zapytań jest naprawdę wygodne. Możesz też kompilować
jedno zapytanie, aby zobaczyć wygenerowany SQL.