如何让flask-sqlalchemy的查询对象选择列(或说字段)?

时间:2011-08-27 12:07:34

标签: mysql postgresql group-by sqlalchemy flask-sqlalchemy

我遇到了一整天困扰我的问题。我正在使用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中它是错误的并且在group byid或者聚合函数中要求除了site_id之外的其他字段,我知道postgresql在SQL上比mysql更严格,所以我必须在msg_published的查询对象中选择site_id,但在纯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 )

并在flask-sqlalchemy中,如何让它发挥作用?

1 个答案:

答案 0 :(得分:1)

你大部分都在那里。在PostgreSQL中做MySQL允许的东西需要一个subselect。

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))