我有一个带有日期时间字段的 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 中组合强制转换和不同的运算符