2016-11-21 73 views
0

我在SQLAlchemy的如下表:查询JSON与SQLAlchemy的使用`sqlalchemy.types.JSON`数据类型

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() 

的上面的查询,只要在我的表中的列infosqlalchemy.dialects.postgresql.JSON类型的工作就好了。但是,如果我用JSONsqlalchemy.JSON我得到以下错误:AttributeError: Neither 'BinaryExpression' object nor 'Comparator' object has an attribute 'astext'

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

回答

0

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