SQLAlchemy将布尔列强制转换为int

Dea*_*nLa 6 python postgresql sqlalchemy

我有一张用户记录表,希望在满足某些条件时查看平均值。条件列是布尔值。在Postgresql中,我可以轻松地进行转换:

select id, avg(cond::INT) from table group by id;
Run Code Online (Sandbox Code Playgroud)

但是在SQLAlchemy中我找不到任何与之等效的东西::INT
我该如何处理类型转换?我有

orm_query(Table.id, func.avg(Table.cond))
Run Code Online (Sandbox Code Playgroud)

当然,这会返回错误。

mat*_*ino 7

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

from sqlalchemy.sql.expression import cast
import sqlalchemy

orm_query(Table.id, func.avg(cast(Table.cond, sqlalchemy.Integer)))
Run Code Online (Sandbox Code Playgroud)


Ilj*_*ilä 5

<expr>::<type>PostgreSQL的特定语法CAST(<expr> AS <type>)标准的SQL等同。在SQLAlchemy中,您可以通过多种方式生成类型转换表达式。在这种情况下,您可以简单地:

orm_query(Table.id, func.avg(Table.cond.cast(Integer)))
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用cast()构造。