2011-01-03 9 views
18

私はDateTimeフィールドにいくつかのオブジェクトを格納するためのSQLAlchemyのを使用しています:Python SqlAlchemy order_by DateTime?

my_date = Field(DateTime()) 

私が最も最近のいくつかのオブジェクト(直近のあるmy_dateフィールドを持つエンティティ)を取得するためのクエリを実行したいのですが。

私は次のことを試してみた:

entities = MyEntity.query.order_by(MyEntity.time).limit(3).all() 
entities = MyEntity.query.order_by(-MyEntity.time).limit(3).all() 

しかし、これらのクエリは、同じ順序で同じオブジェクトを返します。 SqlAlchemyのドキュメントでは、順序を逆にするために ' - 'を使用することに注意していますが、ここでは何かが間違っています。

誰でも手助けできますか?

答えて

40

あなたはこのようにそれを行うことができます:ここではsome documentation

from sqlalchemy import desc 

:あなたがする必要があるかもしれません

entities = MyEntity.query.order_by(desc(MyEntity.time)).limit(3).all() 

を。

+0

この操作はデータベースでは非常に遅いです。より速い方法がありますか? – kalu

+0

@kalu:適切なインデックスを使用していますか?生成されたSQLを見て、それをプロファイルしてみてください。 – thirtydot

1

私はthirtydotの答えが正しいことを確認できるようにsqlalchemyを定期的に使用しています。-オペレータの代わりにsqlalchemy.sql.descを使用してorder_byに影響を与える必要があります。

4
entities = MyEntity.query.order_by(MyEntity.my_date.desc()).limit(3).all() 

が有効です。

+0

私は 'import 'を避けるため、これを好きです。 – gwg