pymysql 数据格式%s
时间: 2025-04-06 07:14:22 浏览: 22
### PyMySQL 中使用 `%s` 占位符的方法
在 Python 数据库编程中,为了防止 SQL 注入攻击并提高代码安全性,推荐使用参数化查询的方式构建 SQL 语句。PyMySQL 支持通过 `%s` 来表示占位符,并将其替换为实际的数据值。
以下是关于如何正确使用 `%s` 占位符的具体说明:
#### 安全性和必要性
当需要动态生成 SQL 查询时,直接拼接字符串可能会导致严重的安全隐患——SQL 注入攻击[^5]。因此,在 PyMySQL 中应始终采用参数化的查询方式来传递数据。这种方式不仅能够有效防范 SQL 注入风险,还能简化编码过程中的复杂度管理。
#### 基本语法
执行带有参数的 SQL 操作通常涉及两个部分:一是定义含有 `%s` 的 SQL 字符串模板;二是提供一个元组或者字典形式的实际参数列表用于填充这些占位位置。具体实现如下所示:
```python
import pymysql
# 创建连接对象
connection = pymysql.connect(host='localhost',
user='root',
password='password',
database='test_db')
try:
with connection.cursor() as cursor:
# 插入单条记录
sql_insert_single = "INSERT INTO users (name, age) VALUES (%s, %s)"
data_to_insert = ('Alice', 25)
cursor.execute(sql_insert_single, data_to_insert)
# 批量插入多条记录
sql_bulk_insert = "INSERT INTO users (name, age) VALUES (%s, %s),(%s, %s)"
bulk_data = ('Bob', 30, 'Charlie', 35)
cursor.execute(sql_bulk_insert, bulk_data)
# 更新某条记录
sql_update = "UPDATE users SET age=%s WHERE name=%s"
update_params = (40, 'Alice')
cursor.execute(sql_update, update_params)
# 删除一条记录
sql_delete = "DELETE FROM users WHERE name=%s"
delete_param = ('Bob',)
cursor.execute(sql_delete, delete_param)
# 提交更改到数据库
connection.commit()
finally:
# 关闭连接
connection.close()
```
上述代码展示了四种基本的操作模式:插入、批量插入、更新以及删除。每种情况下都利用了 `%s` 参数化技术代替原始值嵌套于 SQL 文本之中[^4]。
#### 特殊情况处理
有时可能遇到更复杂的场景比如条件判断或字段名变化等问题,则需额外小心对待。对于这种情况可以考虑借助 ORM 工具如 SQLAlchemy[^3] 或者其他高级框架完成相应需求而无需手动构造危险性的原生 SQL 表达式。
---
阅读全文
相关推荐


















