如何让SQLAlchemy的session.execute替换参数时不自动添加单引号
解决方案
你的问题根源是把参数占位符写在了SQL的字符串字面量内部,数据库驱动识别到你传入的是字符串类型参数时,会自动添加单引号包裹,最终会生成'{"name": "'你的新名称'"}'的错误语法结构。
你完全不需要手动拼接JSON字符串,直接用PostgreSQL原生的jsonb_build_object函数构造目标JSON结构即可,修改后的SQL片段如下:
jsonb_pretty(jsonb_build_object('analysis_config', jsonb_agg( case value->>'name' when :old_name then value || jsonb_build_object('name', :new_name) else value end )))
修改后你原先的参数绑定代码不需要做任何改动,直接执行即可:
session.execute(statement, params={"old_name": old_name, "new_name": new_name})
这个方案既规避了f-string拼接带来的SQL注入风险,也完全解决了参数自动加单引号的问题,性能和安全性都更优。
内容的提问来源于stack exchange,提问作者Larissa Leite
相关产品推荐
相关产品推荐

