如何让SQLAlchemy session.execute在替换参数时不在字符串中添加单引号



我在一个更大的语句中有这段SQL,我需要替换两个变量:

jsonb_pretty(jsonb_build_object('analysis_config', jsonb_agg(
case value->>'name'
when :old_name then value || '{"name": ":new_name"}'
else value
end
))

问题是,当我执行session.execute(statement, params={"old_name": old_name, "new_name": new_name})时,new_name会被单引号取代,这样就不起作用了。它需要明确地用双引号括起来(我已经尝试过如上所述添加它们)。fstring运行得很好,但我们不想在这里这样做。有什么简单的方法吗?谢谢

一个选项是将整个JSON字符串作为值传递。代替

when :old_name then value || '{"name": ":new_name"}'

使用

when :old_name then value || :new_name

并传递编码字符串作为值:

import json
session.execute(
statement,
params={
"old_name": old_name,
"new_name": json.dumps({"name": new_name})
})

相关内容

  • 没有找到相关文章

最新更新