我有一个带有日期时间字段的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))
显然这是因为时间戳在同一天内并不是唯一的。然而,奇怪的是我获得了unicode字符串而不是datetime实例:
(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中组合强制转换和不同的运算符