json_contains
使って文字列で検索しようとしたら少しハマった。
成功例
""
で囲む必要がある。実際mysqlで直接selectするときもjson_contains(fuga, '"piyo"')
とする必要がある。
success.py
from sqlalchemy import func
search_str = 'piyo'
db.session.query(Hoge).filter(func.json_contains(Hoge.fuga, f'"{search_str}"'))
失敗コード例
fail.py
from sqlalchemy import func
search_str = 'piyo'
db.session.query(Hoge).filter(func.json_contains(Hoge.fuga, search_str))
エラーメッセージ
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (3141, 'Invalid JSON text in argument 2 to function json_contains: "Invalid value." at position 0.')