Python操作MySQL时处理特殊字符与SQL注入风险

键盘旁的猫
键盘旁的猫
发布时间:2026-10-13| 4人浏览过
原创

本文探讨在Python中执行MySQL查询时,如何处理包含单引号、双引号等特殊字符导致的拼接错误,以及在使用Format方法时自动转义的行为。同时详细解析了在Python代码中编写包含百分号的Like语句时,因Python字符串格式化与SQL通配符冲突而产生的转义规则,提供通过增加百分号数量来正确转义的解决方案。

Python中MySQL查询的特殊字符处理与拼接风险

在实际开发中,经常需要执行表扫描操作,获取结果集后,再基于这些结果去另一张表中查询详细信息。例如以下代码片段展示了这一常见场景:


index_sql_str = "select %s from user where %s = %d" % ("social_id", "user_id", u_id)
  db_cursor.execute(index_sql_str)
  rows = ['"' + row[0] + '"' for row in db_cursor.fetchall()]
  if len(rows) == 0:
    return None
  result = []
  sql_str = "select %s user_detail where %s in (%s)" % (",".join(user_third_column_name), "social_id", ",".join(rows))
  db_cursor.execute(sql_str)

在构建SQL查询字符串时,通常使用%s占位符或字符串拼接方式。如果从第一张表获取的键值中包含单引号(')或双引号("),直接拼接会导致SQL语法错误,甚至引发潜在的安全风险。

一种可行的替代方案是使用Python的format方法进行字符串格式化,具体示例如下:

使用Format方法处理引号字符


>>> a = 'test"test'
>>> "insert into user {0}".format(a)
'insert into user test"test'
>>> b = "test'test"
>>> "insert into user {0} where {1} = x".format(a,b)
'insert into user test"test where test\'test = x'

值得注意的是,如果待插入或查询的字符串同时包含单引号和双引号,Python的format方法会自动为这些字符添加转义字符,从而在一定程度上避免语法错误。

补充说明:关于在Python中处理MySQL Like语句中百分号(%)的特殊问题

Like语句中百分号的转义技巧


#@ 1 - 正常执行的mysql 语句为:
 select * from RESIDENTIAL_AREA where RA_ID like 'HF-%' 
 
#@ 2 - 在python 代码中为: 最后面的那个 % 需要4个% 去代替(raid = HF-)
select_sql = ''' select * from RESIDENTIAL_AREA where RA_ID 
  like '%s%%%%' ''' % (raid)
 
 
 
#@ 3 - python 代码中 输出结果为:print(select_sql)
 select * from RESIDENTIAL_AREA where RA_ID like 'HF-%%' 

以上内容总结了Python处理MySQL特殊字符的关键点,旨在为开发者提供参考。希望这些技巧能帮助大家在实际项目中更好地处理数据库交互问题。

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

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 算法库。