Python MySQLdb 执行 SQL 语句的参数传递方式与最佳实践

Owen
Owen
发布时间:2026-10-13| 5人浏览过
原创

本文详解 Python 中使用 MySQLdb 执行 SQL 语句时的参数传递方法。对比直接拼接字符串与使用 %s 占位符的区别,重点介绍字典(dict)传参的优势,并指出 %s 无需引号且能防止 SQL 注入的关键细节,帮助开发者编写更安全、可维护的代码。

MySQLdb 参数传递概述

在使用 MySQLdb 连接数据库并执行 SQL 语句时,主要存在以下几种传递参数的方法。

1. 不传递参数


conn = MySQLdb.connect(user="root",passwd="123456",host="192.168.101.23",db="cmdb")

orange_id = 98
sql = "select * from orange where id=%s" % orange_id

cursor = conn.cursor(sql)
cursor.execute()

基本参数传递方法

2. 传递参数

color = "yellow" sql = "select * from orange where color = %s"

cursor.execute(sql, color)

需要注意,此处的占位符统一使用 %s,无论传入的是字符串、数字还是其他数据类型,均使用此占位符。

此外,%s 不能添加引号,例如写成 '%s' 是错误的写法。

这与第一种写法有何区别?

两者的核心区别在于变量的解析机制:

第一种写法使用百分号 %,由 Python 解释器对 %s 执行字符串替换。这种方法存在安全隐患,有时无法正确解析包含特殊字符的内容,甚至可能导致 SQL 注入攻击风险。

第二种方式中,变量作为 execute 方法的参数传入,由 MySQLdb 内部方法将变量解释为合适的内容。

通常情况下,建议使用第二种方法,即将变量作为参数传递给 execute 函数。

字典类型传参优势

3. 使用字典(dict)类型传递参数


sql = "select * from orange where %(color)s, %(weight)s"
values = {"color": "yellow", "weight": 30}
cursor.execute(sql, values)

这种方式下,传递的参数与占位符的对应关系更加清晰。特别是在参数较多的情况下,使用字典可以确保参数传递顺序的正确性。

pymysql 动态传参补充

补充知识:Python 自动化中 pymysql 库使用变量向 SQL 语句动态传递参数(SQL 注入防范与传参策略)

在使用 Python 3 连接 MySQL 实现自动化增删查改操作时,由于项目需求,许多 SQL 语句过于复杂,导致传递的参数数量多且容易变动。这常使开发者不知如何动态传递参数,部分人采用笨拙的字符串拼接方式,不仅工作量大,复杂语句拼接时还容易出错且难以维护。因此,这里整理 %s 占位符结合字典传参的用法。


import pymysql
 
db = pymysql.connect(host="119.XX.XX.XX",
            port=3306,
            user="XXXXXXXX",
            passwd="XXXXXXXXXXXXX",
            db="XXXXXX",
            charset='utf8')
 
# %s 占位符为需要传递的参数,切记不要加''双引号,要不然会报错
sql = "SELECT totalusercount * 1.4 FROM mm_project_uv_outdoor WHERE poiid = %s AND currenttime = %s"
 
cursor = db.cursor()
# 以下为传递多个参数的用法
cursor.execute(sql,['B00140N5CS','2019-04-23'])
# 传递单个参数时 cursor.execute(sql,'B00140N5CS')
print(cursor.fetchall())
db.close()

运行后即可获取查询到的数据。

最后,建议大家多查阅官方文档或标准教程,这对学习更有益。

以上关于 Python MySQLdb 执行 SQL 语句时的参数传递方式的全部内容,希望能给大家提供参考,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。