我有一个带有 JSON 列的Movies表,定义为:
movie_info = Column('movie_info', JsonEncodedDict)
Run Code Online (Sandbox Code Playgroud)
其中 JsonEncodedDict:
class JsonEncodedDict(TypeDecorator):
impl = Text
def process_bind_param(self, value, dialect):
if value is None:
return '{}'
else:
return json.dumps(value)
def process_result_value(self, value, dialect):
if value is None:
return {}
else:
return json.loads(value)
Run Code Online (Sandbox Code Playgroud)
插入工作按预期进行。当我想要查询数据并对我的列执行过滤时,我的问题就开始了。假设我有一条记录,其中movie_info列是:
{
"title": "The Movie - 3",
"review": "Best movie I have ever seen"
}
Run Code Online (Sandbox Code Playgroud)
我想查询我的表并获取评论包含“最佳”的所有记录
我尝试过类似的事情
session.query(Movies).filter('best' in Movies.movie_info['review']).all()
session.query(Movie).filter('best' in func.json_compare(Movies.movie_info['review'])).all()
Run Code Online (Sandbox Code Playgroud)
还有几个查询,但没有任何效果。任何想法将不胜感激