我在一个更大的语句中有这段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})
})