python - 如何使用 LIKE 子句转义 pymysql 中的 % 和 \ 符号?
问题描述
我想在我的“事件”列中找到类似“概率:10%”或“10% 高”的内容,但是当我使用下面的代码时:
conn = pymysql.connect(host="localhost", port=3306, user='myid', passwd='mypwd', db='mydb', charset='utf8')
curs = conn.cursor()
key = "%"
curs.execute(
"SELECT count(*) AS number FROM city WHERE events LIKE %s",
("%" + key + "%",)
)
它返回表中的每一行。它执行了这个查询:
SELECT count(*) AS number FROM city WHERE events LIKE '%%%'
像这样,我不是故意的。
搜索反斜杠符号也给了我不正确的结果。
我应该怎么做才能得到正确的结果?
提前致谢。
解决方案
您可以在 SQL 中使用 concat 并传递值,而不是参数中的 concat 通配符
curs.execute(
"SELECT count(*) AS number FROM city WHERE events LIKE CONCAT('%', %s, '%')",
(key ,)
)
或由@Notinlist 建议
curs.execute("SELECT count(*) AS number FROM city WHERE events LIKE CONCAT('%%', %s, '%%')", (key ,) )
推荐阅读
- navigation - 使用寻路导航 Godot 限制移动
- reactjs - 如何使用接口定义文档的结构
- r - 使用 df 中的元素匹配查找表中的 colname 以合并 3 个数据帧的多个条件
- python - 我可以在 Python 库中向公众公开 API URL 吗?
- imagemagick - 如何在 ImageMagick 中为带有对象的图片添加标题?
- react-native - 反应本机图像'警告:道具类型失败:提供给`Image`的无效道具`source`。'
- vue.js - Ionic 框架到底是什么?
- excel - 1004 个宏,错误隐藏数据透视表中的计算字段
- rust - 在 Rust 中创建可变 Trait 对象(有时是共享的)向量
- google-cloud-firestore - 这可能是firestore错误吗?