我在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上工作)
答案 0 :(得分:0)
也许你可以尝试如下
from sqlalchemy import JSON
from sqlalchemy.sql.expression import cast
result = session.query(FooModel).filter(FooModel.info['key1'] == cast(1, JSON).all()