Parte
.query(Workflow.user_id, func.count(Log.id))
aggiunge entrambi Workflow
e Log
alla tua domanda. Il primo modello è contrassegnato come tabella primaria e gli altri sono contrassegnati come secondari. Se non ci sono chiamate a .join()
successivamente, le tabelle primarie e secondarie verranno aggiunte al FROM
clausola. Se ci sono chiamate a .join()
sposterà la tabella che riceve nel JOIN
clausola. La cosa importante qui è che .join()
può essere applicato solo alla tabella secondaria.
Il problema è che la tua chiamata a
.join(Workflow, Workflow.id == Log.workflow_id)
tenta di contrassegnare la tabella primaria come unita. Per risolvere il problema devi unirti al tavolo secondario:
.join(Log, Workflow.id == Log.workflow_id)
Puoi aggiungere echo=True
per vedere SQL generato da SQLAlchemy. È davvero conveniente eseguire il debug delle tue query. Oppure puoi compilare
singola query per vedere l'SQL generato.