2013-06-27 40 views
5

我有一个测试记录数据库,其中一列'test_time'定义为日期时间。我想查询有多少不同的日期,因为我想根据日期将测试结果转储到csv。我现在有以下几种:在sqlalchemy中将所选日期时间转换为日期

distinct_dates = list(session.query(Test_Table.test_time).distinct()) 

但是这给了我一个datetime不是日期的列表。当然,我可以在Python中进行转换,但是当我使用sqlite的时候。我做了这个SELECT DISTINCT DATE(test_time) FROM Test_Table。我无法想出sqlalchemy中的等价物。

回答

9

这将是通过使用“投”的表达:

distinct_dates = list(session.query(cast(Test_Table.test_time, DATE)).distinct()) 

编辑:好吧,让我们给这个一杆:

distinct_dates = list(session.query(func.DATE(Test_Table.test_time)).distinct()) 
+0

不看源代码我可以想象这最终使用SQL中的DATE()表达式......有可能它不这么做,但我相信sqlalchemy。 –

+0

我以前试过'cast'。但sqlalchemy总是抛出我这个异常:'ValueError:无法解析日期字符串'2013' - 值不是一个字符串。' – foresightyj

+0

我似乎已经明白了为什么。我正在使用sqlite。我打开了sqlalchemy的echo,实际查询是'SELECT DISTINCT CAST(test_table.test_time AS DATE)as anon_1 FROM test_table'。而且似乎sqlite不支持DATE。它不是返回整个日期,而是仅返回一年。谢谢! – foresightyj

相关问题