2011-01-03 31 views
18

Tôi đang sử dụng SQLAlchemy để lưu trữ một số đối tượng với một trường DateTime:Python SqlAlchemy order_by DateTime?

my_date = Field(DateTime()) 

Tôi muốn chạy một truy vấn để lấy vài đối tượng gần đây nhất (Các đối tượng với lĩnh vực my_date mà gần đây nhất) .

Tôi đã thử những điều sau đây:

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

Nhưng các truy vấn này trả lại cùng một đối tượng theo thứ tự. Các tài liệu SqlAlchemy ghi chú việc sử dụng các '-' để đảo ngược thứ tự, nhưng tôi chắc chắn thiếu một cái gì đó ở đây.

Có ai giúp được không?

Trả lời

40

Bạn có thể làm điều đó như thế này:

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

Bạn có thể cần phải:

from sqlalchemy import desc 

Dưới đây là some documentation.

+0

Thao tác này rất chậm trên cơ sở dữ liệu của tôi. Có cách nào nhanh hơn không? – kalu

+0

@kalu: Bạn có đang sử dụng các chỉ mục phù hợp không? Hãy thử nhìn vào SQL đã tạo và cấu hình nó. – thirtydot

1

Tôi thường xuyên sử dụng sqlalchemy để tôi có thể xác nhận câu trả lời của ba mươi là chính xác, bạn cần sử dụng sqlalchemy.sql.desc thay vì nhà điều hành - để ảnh hưởng đến order_by.

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

sẽ hoạt động.

+0

Tôi thích điều này vì nó tránh 'nhập'. – gwg

Các vấn đề liên quan