2012-05-17 131 views
1

的DateTime的年份元素我有一个表的Sybase使用的SQLAlchemy如下declaritively映射:订单在SQLAlchemy的查询

from sqlalchemy.ext.declarative import declarative_base  
Base = declarative_base() 

class Appointment(base): 
    __tablename__ = 'APPOINTMENT' 
    __table_args__ = {'quote':False} 

    dt = Column(Date, name='dt_appointment') 

我如何查询此表,排序按年(dt_appointment)? Year()是一个有效的sybase T-SQL函数。我试过,包括计算列如:

dtYear = Column(Integer, name='Year(dt_appointment)', quote=False) 

这并不与查询工作:

session.Query(Appointment).order_by(Appointment.dtYear) 
+0

如果你可以将你的日期的一部分作为一年,那么你可以订购。 – Nilesh

回答

5

您应该能够使用Function expression

from sqlalchemy.sql import func 
qry = session.query(Appointment).order_by(func.DATE(Appointment.dt)) 

但是请注意,如果您经常使用这些类型的过滤器,建议您在表格中创建一个计算列, h只包含year的值dt_appointment并在此列上创建index。这将大大提高查询/过滤器的速度。 [我不知道Sybase,所以我认为在Sybase中可以创建一个computed persistent列,就像在MSSQL中可以做的那样]。

+0

使用sqlalchemy.sql.func很有用,谢谢。 – nickos556