在SQLAlchemy中从JSON显式转换为双精度

时间:2017-11-17 09:00:04

标签: python postgresql sqlalchemy

我正在实现平均查询,但是如何在SQLAlchemy中显式定义double,如下面的PostgreSQL查询中所定义的那样:

SELECT avg((tags->>'price')::double precision) from parcel_table

Python:

parcel_table.query.\
    with_entities(
        func.avg(parcel_table.tags["price"]).
            label('average`')).\
    filter(
        parcel_table.time_stamp.between("'2017-01-01 00:00:000'",
                                        "'2017-10-01 00:00:000'"),
        parcel_table.name== 'sakshi').\
    first()

1 个答案:

答案 0 :(得分:0)

表达式

(tags->>'price')::double precision

成为JSON index operation with a cast在SQLAlchemy中有一个很好的快捷方式:

from sqlalchemy.dialects import postgresql

parcel_table.tags["price"].astext.cast(postgresql.DOUBLE_PRECISION)

请注意,“价格”这个名称暗示这是关于金钱的,而floating point numbers and money are a bad match通常也是如此。