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

如何编写可匹配单引号与双引号的SQL LIKE语句?

解决包含特殊字符的SQL LIKE查询问题

原代码直接用f-string拼接SQL语句,当加密后的字符串包含单引号时,会直接破坏SQL语法结构,同时存在SQL注入风险,正确的处理方式如下:

优先方案:使用参数化查询

这是最安全、最可靠的做法,不同Python数据库驱动的参数占位符略有差异,示例如下:

SQLite3 示例

encryptedaName = encrypt(pName)
# 用?作为占位符
sql = "SELECT * FROM laptop WHERE Name LIKE ?"
# 将通配符和加密字符串拼接后作为参数传入
cursor.execute(sql, ('%' + encryptedaName + '%',))

PyMySQL(MySQL)示例

encryptedaName = encrypt(pName)
# 用%s作为占位符
sql = "SELECT * FROM laptop WHERE Name LIKE %s"
cursor.execute(sql, ('%' + encryptedaName + '%',))

参数化查询会自动处理字符串中的单引号、双引号等特殊字符,同时彻底避免SQL注入问题,是推荐的标准写法。

不推荐的手动转义方式

如果因特殊场景必须手动拼接SQL,需要将字符串中的单引号替换为两个单引号(SQL语法中用两个单引号表示一个单引号):

encryptedaName = encrypt(pName).replace("'", "''")
sql = f"SELECT * FROM laptop WHERE Name LIKE '%{encryptedaName}%'"

这种方式容易遗漏其他特殊字符的处理,且无法防范SQL注入,仅作应急参考,不建议在生产环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:50:46