comment convertir la requête mysql suivante en sqlalchemy?
SELECT * FROM `table_a` ta, `table_b` tb where 1
AND ta.id = tb.id
AND ta.id not in (select id from `table_c`)
jusqu'à présent, j'ai ceci pour sqlalchemy:
query = session.query(table_a, table_b)
query = query.filter(table_a.id == table_b.id)
Essaye ça:
subquery = session.query(table_c.id)
query = query.filter(~table_a.id.in_(subquery))
Remarque: table_a
, table_b
et table_c
doivent être des classes mappées, pas des instances Table
.
Les internes ORM décrivent l'opérateur notin_()
, vous pouvez donc dire:
query = query.filter(table_a.id.notin_(subquery))
# ^^^^^^
De la documentation:
hérité de la méthode
notin_()
deColumnOperators
implémentez l'opérateur
NOT IN
.Cela équivaut à utiliser la négation avec
ColumnOperators.in_()
, c'est-à-dire~x.in_(y)
.
voici le code complet:
#join table_a and table_b
query = session.query(table_a, table_b)
query = query.filter(table_a.id == table_b.id)
# create subquery
subquery = session.query(table_c.id)
# select all from table_a not in subquery
query = query.filter(~table_a.id.in_(subquery))