我有一个用户记录表,我希望看到满足某些条件时的平均值。 condition列是一个布尔值。 在Postgresql中,我可以轻松地进行转换:
select id, avg(cond::INT) from table group by id;
但是在SQLAlchemy中我找不到与::INT
等价的东西
我如何处理类型转换?
我有
orm_query(Table.id, func.avg(Table.cond))
当然会返回错误。
答案 0 :(得分:3)
<expr>::<type>
是Postgresql specific syntax,CAST(<expr> AS <type>)
是标准的SQL等价物。在SQLAlchemy中,您可以使用各种方式生成类型转换表达式。在这种情况下,您可以简单地:
orm_query(Table.id, func.avg(Table.cond.cast(Integer)))
另一个选择是使用cast()
构造。
答案 1 :(得分:2)
您可以使用cast
功能将布尔值转换为整数:
from sqlalchemy.sql.expression import cast
import sqlalchemy
orm_query(Table.id, func.avg(cast(Table.cond, sqlalchemy.Integer)))