Част
.query(Workflow.user_id, func.count(Log.id))
добавя както Workflow и Log към вашето запитване. Първият модел е маркиран като основна таблица, а други са маркирани като вторични. Ако няма извиквания към .join() след това първичните и вторичните таблици ще бъдат добавени към FROM клауза. Ако има извиквания към .join() ще премести таблицата, която получава, към JOIN клауза. Важното тук е, че .join() може да се приложи само към вторичната таблица.
Проблемът е, че вашето обаждане до
.join(Workflow, Workflow.id == Log.workflow_id)
опитва да маркира основната таблица като присъединена. За да коригирате проблема, трябва да се присъедините към вторична таблица:
.join(Log, Workflow.id == Log.workflow_id)
Можете да добавите echo=True
за да видите SQL, генериран от SQLAlchemy. Наистина е удобно да отстранявате грешки в заявките си. Или можете да компилирате
единична заявка, за да видите генерирания SQL.