【发布时间】:2015-12-28 05:05:11
【问题描述】:
我有一个包含列的表 - id(int)、date(DateTime)、value(float)。我想按日期输出具有id=2. 的所有行的每日平均分组
我为此编写了以下 sql 查询并且查询工作正常:
select cast(date as date), avg(value) from table where id=2 group by cast(date as date)
对于同样的问题,如果我想在 sqlalchemy 中执行,我使用以下表达式:
>> from sqlalchemy import sql, types
>> x = sql.cast(Table.date, types.Date)
但是当我尝试执行 x 时,出现以下错误:
>> x.execute()
ArgumentError: Not an executable clause: CAST(Table.date AS DATETIME)
这意味着 SQL Server 正在考虑 types.Date as DateTime。
请忽略 ArgumentError。我要关注的是内部sql查询使用CAST(Table.date AS DATETIME)而不是CAST(Table.date AS DATE)
有什么办法可以让我在 sqlalchemy 中将 DateTime 转换为 Date?
【问题讨论】:
-
您应该使用
sqlalchemy.func.cast而不是sqlalchemy.sql.cast。 -
我试过用它。我收到了这个错误:-
ProgrammingError: (ProgrammingError) ('Invalid parameter type. param-index=0 param-type=Date') 'SELECT cast(Table.date, ?) AS cast_1, avg(Table.value) AS avg_1 FROM Table AS Table_1 WHERE Table_1.id = ? GROUP BY cast(Table_1.date, ?)' [Date(), 2, Date()]
标签: python sql-server sqlalchemy