Dor*_*lon 2 python mysql sqlalchemy
我有一个带有 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)
还有几个查询,但没有任何效果。任何想法将不胜感激
速度很快,但我找到了解决方案。我不会删除这个问题,因为我还没有在网上找到任何答案,所以我相信这对其他人会有帮助。
使用 json_extract 而不是 json_contains:
session.query(Movies).filter(func.json_extract(Movies.movie_info, '$.review').ilike('%best%')).all()
Run Code Online (Sandbox Code Playgroud)