I'm new in sqlalchemy, please help. I have this SQL query:
SELECT * FROM films
WHERE (
SELECT count(film_to_genre.id) FROM film_to_genre
WHERE films.id = film_to_genre.film_id AND film_to_genre.genre_id IN (2, 14)
) = 2
And I want to write it in SqlAlchemy. This is what I've tried:
db.query(models.Film)
.filter(db.query(func.count(models.FilmToGenre.id))
.filter(and_(models.Film.id == models.FilmToGenre.film_id,
models.FilmToGenre.genre_id.in_(genre_ids)))
.subquery().count == len(genre_ids)))
It converts to this SQL (problem in clause "WHERE false", it evaluates subquery immediately):
SELECT films.id AS films_id, films.kinopoisk_id AS films_kinopoisk_id, films.title AS films_title, films.year AS films_year, films.budget AS films_budget, films.run_time AS films_run_time, films.description AS films_description
FROM films JOIN film_to_genre ON films.id = film_to_genre.film_id
WHERE false
LIMIT %(param_1)s OFFSET %(param_2)s