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

Python SQL语句中%(name)s占位符的作用是什么?

Python SQL语句中%(name)s用法说明

这是Python百分号字符串格式化体系下的命名占位符语法,不属于SQL原生语法,是Python数据库驱动做参数替换的标准规则,和常见的位置占位符%s属于同一套实现逻辑。

具体语法规则

  • 常规的百分号位置格式化需要按顺序传入参数,示例:
    print("我的名字是%s,今年%d岁" % ("李明", 25))
    当参数数量较多时很容易出现顺序错位的问题。
  • 命名占位符通过字典映射传参,不需要严格匹配参数顺序,可读性和容错性更高,示例:
    print("我的名字是%(name)s,今年%(age)d岁" % {"name": "李明", "age": 25})
    其中%(key)部分的key对应传入字典的键,末尾的s/d等字符是类型标识,和常规百分号格式化的类型规则完全一致,s代表字符串类型、d代表整数类型、f代表浮点数类型。

SQL场景的实现逻辑

你看到的SQL语句执行时,Python数据库驱动会将占位符和传入的参数字典做匹配替换,无需开发者手动拼接字符串,示例执行代码:

import MySQLdb
# 数据库连接代码省略
cursor = db.cursor()
sql = 'select "modified" from tabDocType where "name" = %(name)s order by modified desc'
# 参数字典的key要和SQL中的占位符名称完全对应
params = {"name": "用户管理"}
cursor.execute(sql, params)
  • 目前绝大多数Python关系型数据库驱动(MySQLdb、pymysql、psycopg2等)都原生支持这种命名占位符的传参方式
  • 用驱动自带的参数传参机制替换占位符,而非手动用%运算符拼接SQL,可以有效避免SQL注入风险,是SQL操作的最佳实践之一
  • 你此前查阅的百分号转义规则是用于输出百分号本身时用%%做转义,确实和当前命名占位符的场景无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:45:02