1

次のように、sqlalchemy を使用して宣言的にマップされた Sybase テーブルがあります。

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)
4

1 に答える 1

5

関数式を使用できるはずです:

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

ただし、これらのタイプのフィルターを頻繁に使用する場合は、テーブルに計算列を作成することをお勧めします。この列には のyear値のみが含まれ、この列に がdt_appointment作成indexされます。これにより、クエリ/フィルターの速度が大幅に向上します。[私は Sybase の知識がないので、Sybase ではcomputed persistent列を作成できると思いますMSSQL

于 2012-05-17T16:07:22.450 に答える