如何阻止SQLAlchemy为json_value函数参数添加N前缀?
解决SQLAlchemy Core中json_value参数被添加N前缀的问题
问题原因
SQLAlchemy默认将Python字符串识别为Unicode类型,生成SQL时会自动给字符串添加N前缀,但SQL Server的json_value函数对路径参数不需要该前缀,导致JSON格式解析报错。
解决方案
方法1:用sa.literal指定非Unicode字符串类型
通过literal显式声明路径字符串为普通字符串类型,避免添加N前缀:
from sqlalchemy import literal sa.func.json_value(table.c['json_field'], literal('$.attr', type_=sa.String))
方法2:用sa.text直接嵌入路径字符串
直接使用text片段定义路径部分,SQLAlchemy不会对其进行转义或添加前缀(注意自行添加单引号):
from sqlalchemy import text sa.func.json_value(table.c['json_field'], text("'$.attr'"))
方法3:自定义适配SQL Server的json_value函数
如果需要频繁使用,可封装一个专用函数统一处理参数类型:
from sqlalchemy import func, String def sqlserver_json_value(expr, path): return func.json_value(expr, literal(path, type_=String)) # 使用示例 sqlserver_json_value(table.c['json_field'], '$.attr')
效果验证
使用上述方法后,生成的SQL会符合预期:
WHERE json_value(table.json_field, '$.attr') = N'value'
可避免SQL Server抛出的JSON格式错误。
内容的提问来源于stack exchange,提问作者Meitham
相关产品推荐
相关产品推荐

