使用`sqlalchemy.types.JSON`数据类型使用SQLAlchemy查询JSON

时间:2016-11-21 05:57:12

标签: mysql json postgresql sqlalchemy

我在SQLAlchemy中有以下表格:

class FooModel(Base):
    __tablename__ = 'table'
    id = sqla.Column('id', INTEGER, primary_key=True)
    info = sqla.Column(JSON)

我想执行以下查询:

result = session.query(FooModel).filter(
    FooModel.info['key1'].astext.cast(INTEGER) == 1).all()

只要我的表中info列的类型为sqlalchemy.dialects.postgresql.JSON,上述查询就可以正常运行。但是,如果我使用JSON中的sqlalchemy.JSON,我会收到以下错误:AttributeError: Neither 'BinaryExpression' object nor 'Comparator' object has an attribute 'astext'

由于以上是最基本的过滤器,这是否意味着为了进行任何类型的查询,您必须使用特定SQL方言中的类型?换句话说:当我使用sqlalchemy.JSON类型时,是否可以修改上述查询并使其运行? (这将允许代码在PostreSQL和MySQL上工作)

1 个答案:

答案 0 :(得分:0)

也许你可以尝试如下 from sqlalchemy import JSON from sqlalchemy.sql.expression import cast result = session.query(FooModel).filter(FooModel.info['key1'] == cast(1, JSON).all()