как позволить объекту запроса flask-sqlalchemy выделять столбцы (или, скажем, поля)? - PullRequest
0 голосов
/ 27 августа 2011

Я столкнулся с проблемой, которая связывала меня весь день.Я использую flask / flask-sqlalchemy / postgresql, и я хочу сделать это:

published_sites = msg_published.query \
            .filter( and_(*filter_clause) ) \
            .group_by( msg_published.site_id ) \
            .order_by( order_clause ) \
            .paginate( page_no, per_page, error_out = False )

, но в mysql это нормально, а в postgresql это неправильно и запрашивать другие поля, кроме site_idЯ знаю, что в выражении group by или в функции агрегации postgresql более строг в SQL, чем в mysql, поэтому я должен выбрать site_id в объекте запроса msg_published, но в чистом sqlalchemy я могу сделать так:

published_sites = session.query( msg_published.site_id ) \
            .filter( and_(*filter_clause) ) \
            .group_by( msg_published.site_id ) \
            .order_by( order_clause ) \
            .paginate( page_no, per_page, error_out = False )

и как в колбе-sqlalchemy, как заставить это работать?

1 Ответ

1 голос
/ 04 сентября 2011

Ты большую часть пути туда. Чтобы сделать в PostgreSQL то, что разрешает MySQL, требуется выборка.

published_sites_ids = session.query( msg_published.site_id ) \
            .filter( and_(*filter_clause) ) \
            .group_by( msg_published.site_id ) \
            .order_by( order_clause ) \
            .paginate( page_no, per_page, error_out = False )

published_sites = session.query(msg_published) \
                         .filter(msg_published.id.in_(published_sites_ids))
...