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では間違っており、groupby句または集計関数のいずれかで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

あなたはそこへの道のほとんどです。MySQLが許可することをPostgreSQLで行うには、副選択が必要です。

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 に答える