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

使用JinjaSql时绑定参数名被自动添加_1后缀的原因及解决方法

问题原因

这是JinjaSql的默认设计行为,不是运行逻辑错误。为了避免同一个参数在SQL模板中被多次引用时出现命名冲突,库内置的参数命名规则会自动给每个绑定参数追加计数器后缀,哪怕你只引用了一次{{myid}},也会生成带_1后缀的参数名。

另外你贴的代码片段里有一处语法笔误:实例化JinjaSql的行尾用了右大括号}而非右括号),如果你的实际运行代码也是这么写的会直接触发语法错误,若你已经能正常打印bind_params结果,说明这个只是粘贴时的输入错误,可忽略。

修复方案

你可以根据自己的使用场景选任意一种方案:

  • 方案1:无需修改命名规则,直接使用生成的结果
    调用prepare_query返回的myquery中的占位符已经同步替换为%(myid_1)s,直接把两个返回值传给数据库驱动执行即可,后缀不影响实际运行效果。
  • 方案2:自定义参数命名规则,取消自动加后缀的行为
    初始化JinjaSql时传入自定义的key_generator参数,直接返回原参数名即可:
    from jinjasql import JinjaSql
    
    query = '''
          SELECT *
          FROM table
          WHERE id = {{myid}}'''
    params = {'myid':3}
    
    # 自定义key生成规则,直接返回原始参数名
    j = JinjaSql(param_style='pyformat', key_generator=lambda orig_key, counter: orig_key)
    
    myquery, bind_params = j.prepare_query(query,params)
    
    此时打印bind_params就会得到{'myid':3}的结果。注意该方案下如果同一个参数在模板中被多次引用,绑定参数只会保留一份,不会重复生成。

内容的提问来源于stack exchange,提问作者BNB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:06:03