SQLAlchemy将布尔列强制转换为in

2024-06-08 13:47:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用户记录表,我希望看到一些条件满足时的平均值。条件列是布尔值。 在Postgresql中,我可以很容易地将其转换为:

select id, avg(cond::INT) from table group by id;

但在SQLAlchemy中,我找不到任何等价于::INT的东西 如何处理类型转换? 我有

orm_query(Table.id, func.avg(Table.cond))

当然,这会返回一个错误。


Tags: 用户fromidbypostgresqltablegroup条件
2条回答

可以使用cast函数将布尔值转换为整数:

from sqlalchemy.sql.expression import cast
import sqlalchemy

orm_query(Table.id, func.avg(cast(Table.cond, sqlalchemy.Integer)))

<expr>::<type>是标准SQL等价物Postgresql specific syntaxCAST(<expr> AS <type>)。在SQLAlchemy中,可以使用多种方法生成类型转换表达式。在这种情况下,您可以简单地:

orm_query(Table.id, func.avg(Table.cond.cast(Integer)))

另一种选择是使用^{}构造。

相关问题 更多 >