3

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

4

0 回答 0