0

我遇到了一个困扰我一整天的问题。我正在使用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 by 子句或聚合函数中要求除 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中,如何让它工作?

4

1 回答 1

1

你大部分都在那儿。在 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))
于 2011-09-04T07:48:42.967 回答