Vou falar uma coisa que poucos falam com base em experiência de mercado:
SQLAlquemy é extremamente lento quando precisa fazer pesquisas muito pessadas com muitos joins. Na verdade, a maioria das ORM é. Isso é simplesmente porque eles geram uma camada a mais de abstração.
ORM é execelente para update, delete e insert em bancos que de fato usam arquiterura relacional. Mas lembre-se, ser SQL, não quer dizer que fizeram corretamente relaconal.
Exemplo de select até 4x mais rápido que usando ORM:
cursor.execute(f"""
SELECT autor.aaa, autor.bbb, autor.ccc, xxxx.ddd AS nome_feed, sss.rrrr, ssss.ttttt,
COUNT(*) AS total, CURRENT_TIMESTAMP()
FROM db.sssss
INNER JOIN db.sssss ON ssss.id = xxxx.id_feed
LEFT JOIN db.autor ON autor.id = feed_evento.id_autor
INNER JOIN db.sss ON sss.codigo_feed = sss.codigo
INNER JOIN db.xxx ON xxxxx.codigo = tttttt.codigo_mantenedor
LEFT JOIN db.yyyyy ON yyyy.id_feed = yyyyy.id
LEFT JOIN db.tttt ON tttt.id = zzz.id_escopo_coleta
GROUP BY autor.xxxxxx
ORDER BY total DESC""")
rs = cursor.fetchall()
Você pode instâciar a conexão de forma que retorne um diciońario com a chave sendo o nome da coluna....
Isso curso nenhum fala, mas vale a pena a reflexão...