次のような日時フィールドを持つ SQLAlchemy 宣言型クラスがあります。
class Logon(Base):
id = Column(Integer, primary_key=True)
timestamp = Column(types.DateTime)
event_type = Column(types.Integer)
少なくともイベントがあるすべての日付を取得することに興味があるため、個別の節を使用して操作します。
session.query(sqlalchemy.func.distinct(Logon.timestamp))
タイムスタンプは同じ日に一意ではないため、明らかにこれは誤りです。ただし、datetime インスタンスの代わりに Unicode 文字列を取得するのは奇妙です。
(u'2012-07-26 11:05:01.000000',), (u'2012-07-26 11:12:53.000000',), (u'2012-07-27 16:53:28.000000',)
私が本当に欲しいのは、日時ではなく日付を使用する個別の演算子です。
session.query(sqlalchemy.func.distinct(sqlalchemy.cast(Logon.timestamp,sqlalchemy.Date)))
SQLも私には問題ないようです:
SELECT distinct(CAST(logons.timestamp AS DATE)) AS distinct_1
FROM logons
しかし、驚いたことに、私のクエリの結果は、年を含む単一のエントリです。
[(2012,)]
簡単なループで日付のリストを取得できましたが、SQL や SQLAlchemy 内でキャスト演算子と個別演算子を組み合わせる方法を学びたいと思っています。