我遇到了一整天困扰我的问题。我正在使用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中,如何让它发挥作用?
答案 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))