我在 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
,上述查询就可以正常工作。但是,如果我使用 sqlalchemy.JSON
中的 JSON
,则会收到以下错误: AttributeError: 'BinaryExpression' 对象和 'Comparator' 对象都没有属性 'astext '
。
由于上述是最基本的过滤器,这是否意味着为了进行任何类型的查询,您必须使用特定 SQL 方言中的类型?换句话说:是否可以修改上述查询并使其在使用 sqlalchemy.JSON 类型时运行? (这将允许代码在 PostreSQL 和 MySQL 上运行)
最佳答案
也许你可以尝试如下
从 sqlalchemy 导入 JSON
从 sqlalchemy.sql.expression 导入强制转换
结果 = session.query(FooModel).filter(FooModel.info['key1'] == cast(1, JSON).all()
关于mysql - 使用 `sqlalchemy.types.JSON` 数据类型通过 SQLAlchemy 查询 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40713647/