You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:35:56