2017-06-23 8 views
0

私は、日付がテーブルの最大日付と等しいレコードを取得する必要がある時系列データのテーブルを持っています。 SQLには、これは簡単に、サブクエリを介して達成される、すなわち:サブクエリのSQLAlchemyクラスメソッド

SELECT * from my_table where date = (select max(date) from my_table); 

このテーブルのモデルは次のようになります。

class MyTable(Base): 
    __tablename__ = 'my_table' 
    id = Column(Integer, primary_key = True) 
    date = Column(Date) 

そして、私は2つの別々のクエリ、すなわちでSQLAlchemyの中の所望の動作を達成することができます。

maxdate = session.query(func.max(MyTable.date)).first()[0] 
desired_results = session.query(MyTable).filter(MyTable.date == maxdate).all() 

問題は、私は私のコードでどこでもこのサブクエリを振りかけているということであり、私はそれが無粋ソリューションであると感じています。

session.query(MyTable).filter(MyTable.date == MyTable.max_date)

I:理想的には私は、のようなものを一つのラインにサブクエリを圧縮し、常にそれを再利用できるように、私はモデル定義に固執することができますクラスのプロパティまたはカスタムコンパレータを書きたいですSQLAlchemy docsを見てきましたが、動作するものはありませんでした。誰もこの種の問題に対する解決策を持っていますか?後世のために

答えて

0

、ここで私は

from sqlalchemy.sql import func 
from sqlalchemy import select 

class MyTable(Base): 
    __tablename__ = 'my_table' 
    id = Column(Integer, primary_key = True) 
    date = Column(Date) 
    maxdate = select([func.max(date)]) 

desired_results = session.query(MyTable).filter(MyTable.date == MyTable.maxdate).all() 
を思い付いたソリューションです
関連する問題