flask-sqlalchemy объединить все совпадения из таблицы ассоциаций

#python #flask #sqlalchemy #flask-sqlalchemy #flask-restx

Вопрос:

Я делаю проект в Flask, у меня возникли трудности с Flask-SQLAlchemy.

 class Films(db.Model):
    """Main film table"""
    __tablename__ = 'films'
    film_id = db.Column(db.Integer, primary_key=True)
    film_name = db.Column(db.Text, unique=False, nullable=False, index=True)
 
 class Genres(db.Model):
    """Table with genres"""
    __tablename__ = 'genres'
    genre_id = db.Column(db.Integer, primary_key=True)
    genre_name = db.Column(db.String(20), unique=True, nullable=False)
    gen_films = db.relationship(
        'Films', secondary=films_genres, lazy='subquery',
        backref=db.backref('gen_films', lazy='joined'))
 
 # Association table for table films and table genres
films_genres = db.Table(
    'films_genres',
    db.Column('films_film_id', db.Integer, db.ForeignKey('films.film_id')),
    db.Column('genres_genre_id', db.Integer, db.ForeignKey('genres.genre_id')))
 
 all_films = Films.query.select_from(Films).join(films_genres).join(Genres).filter(
      (films_genres.c.films_film_id == Films.film_id) amp; (films_genres.c.genres_genre_id == Genres.genre_id))
    .add_columns(
            Films.film_name,
            Genres.genre_name
            ).paginate()
 

Когда я делаю запрос, я получаю такой результат:

 [(<Films 1>, 'The Shawshank Redemption', 'Action'), (<Films 1>, 'The Shawshank Redemption', 'Crime')] ...
 

Как я могу повторить запрос, чтобы получить такой результат?

 [(<Films 1>, 'The Shawshank Redemption', ('Action', 'Crime')]
 

Или что-то подобное, чтобы список жанров составлял одну строку, чтобы в дальнейшем перенести это в flask_restx -> Resource -> json

Комментарии:

1. Попробуйте сгруппировать результат newbedev.com/group-by-count-function-in-sqlalchemy

2. Добавлена группа по Films.query.select_from(Films).join(films_genres).join(Genres).filter( (films_genres.c.films_film_id == Films.film_id) amp; (films_genres.c.genres_genre_id == Genres.genre_id)) .add_columns(Films.film_name, Genres.genre_name).group_by( Films.film_name, Genres.genre_name).paginate() , но получена ошибка : [parameters: {'param_1': 20, 'param_2': 0}] (Background on this error at: https://sqlalche.me/e/14/f405)

3. Я пытался воспроизвести ваши модели в течение последних часов, но я продолжаю получать ошибки

4. Можете ли вы указать текст ошибки над этим сообщением

5. Сори gist.github.com/di2mot/6e4e1cc0c6ae81d2159f7ed46063615b