2017-03-14 6 views
0

データベース内の各ユーザーの最新のレコードを、特にsqlalchemy ormを使用して取得したいと考えています。各ユーザーの最近変更されたレコード

session.query(Object)\ 
     .group_by(Object.user_id)\ 
     .order_by(Object.updated_at.desc())\ 
     .first() 

しかし、次のエラーを取得:

(psycopg2.ProgrammingError) column "object.id" must appear in the GROUP BY clause or be used in an aggregate function 

答えて

1

このエラーの原因は、あなたが集計関数なしgroup_byを使用していたということですここで私がしようとしているものです。この

from sqlalchemy import func 
session.query(Object.user_id, func.max(Object.updated_at)).group_by(Object.user_id).all() 

のようなものを試してみてください これは、ユーザーごとに最後updated_at値を返します。テーブルObjectに複数のレコードが同じuser_idである場合にのみ、group_byを使用することが理にかなっています。

+0

はい、これは良い回避策です。しかし、私は、そのレコードがいつ発生したかではなく、各ユーザーの最後のレコード全体を戻したいと思います。クエリを組み合わせる必要がありますか? – dataflow

+1

私はあなたがpostgresqlを使用して参照してください。 postgresqlでは、 'user_id、table_ order by user_id、from update_at desc'のクエリが動作するはずです。 ORMでは、 'session.query(Object).distinct(Object.user_id).order_by(Object.updated_at.desc())。all()' –

+1

@wotalfは役に立ちますか? –

関連する問題