Oto sposób, w jaki to zrobiłem:
map_ids = session.query(Table1.map_id). \
filter(Table1.xxxx == 'xxx_value')
q = session.query(Table2). \
filter(Table2.map_id.in_(map_ids.subquery()))
q.delete(synchronize_session=False)
Kluczem tutaj jest utworzenie podzapytania poprzez znalezienie identyfikatorów, które mają zostać usunięte. Następnie używasz operatora „in_”, aby wybrać rekordy do usunięcia. 'synchoronize_session=False' wykona zapytanie bez aktualizacji sesji. Daje to najlepszy wzrost wydajności.