我正在尝试使用 SQLAlchemy 编写一个查询,该查询使用 JSON 字段进行搜索,如下所示:
records = db_session.query(Resource).filter(
Resources.data["lastname"].astext == "Doe"
).all()
Run Code Online (Sandbox Code Playgroud)
所以就我而言,我写道:
records = session.query(Watch).filter(
Watch.filter_data['session_uuid'].as_text == keys['session_uuid'],
)
Run Code Online (Sandbox Code Playgroud)
这给了我结果AttributeError: Neither 'BinaryExpression' object nor 'Comparator' object has an attribute 'as_text'。
我也尝试像这样修改我的代码:
records = session.query(Watch).filter(
Watch.filter_data.as_text == keys['session_uuid'],
)
Run Code Online (Sandbox Code Playgroud)
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Watch.filter_data has an attribute 'as_text'
基本上,我根本无法执行任何 JSON 查询,而且我现在也不知道为什么。我注意到在上面的代码示例中,他们使用Resourceand Resources- 两个单独的对象,但我不知道每个对象的实现是什么样的,所以这对我没有多大帮助。
我使用 Alembic 定义该字段,如下所示:sa.Column('filter_data', sa.JSON(), nullable=False),
我对这一行的映射如下所示:
class Watch(Base):
__tablename__ = 'watch'
filter_data = Column(sa.JSON(), …Run Code Online (Sandbox Code Playgroud) 仅当您尝试使用ssh隧道使用pgadmin连接到数据库时,才会发生这种情况。ubuntu 18.04存储库中的paramiko和pgadmin4的最新版本无法解决此问题。
alembic ×1
filter ×1
json ×1
paramiko ×1
pgadmin ×1
postgresql ×1
sqlalchemy ×1
ssh-tunnel ×1
ubuntu ×1