如何使用LIKE子句在pymysql中转义%和\符号?

时间:2019-05-12 07:41:46

标签: python mysql 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 '%%%'

像这样,我不是故意的。

搜索反斜杠符号也给了我错误的结果。

我应该怎么做才能得到正确的结果?

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以在SQL中使用concat并传递值来代替concat参数中的wildchar

 curs.execute(
    "SELECT count(*) AS number FROM city WHERE events LIKE CONCAT('%', %s, '%')",
     key ,)
) 

答案 1 :(得分:0)

您应该使用SQL ESCAPE子句:

curs.execute(
    "SELECT count(*) AS number FROM city WHERE events LIKE '%#%%' ESCAPE '#'"
)