[問題] MySQLdb使用like敘述時變數有引號的狀況…

看板Python作者 (沒回應=掛站)時間14年前 (2010/10/01 10:18), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串1/1
在Python中使用MySQLdb library來access mysql database時 為了避免 sql string中的變數含有引號,通常會用下面的方式 cursor.execute (""" SELECT * FROM table WHERE name = %s """, %(var)) 若變數var中含有引號,仍然能被正常的執行 我的疑問是:如果今天改用like子句,如: """SELECT * FROM table WHERE name LIKE "%%s%" """, %(var) 第一個和第三個%符號希望當作like的萬用字元 但python會把它們解釋成第一個例子中%的用法 我知道可以直接用string.replace去掉引號, 但總覺得應該有辦法可以讓字串sql-safe的 類似像 cursor.execute(ToSqlSafeStr(sql_str)) 這樣子的用法 或者像第一個例子的用法 這是個相當常見的需求,Python上應該也早就有標準的解法了吧 但我在Google上找了找卻都只找到部份正確的解法 :( 不知道各位有沒有什麼好的建議呢?謝謝 -- My blog: http://sandwichc-life.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 68.232.127.230

10/01 12:27, , 1F
試試escape
10/01 12:27, 1F

10/01 14:58, , 2F
試試將 "%%s%" 改為 "%%%s%%"
10/01 14:58, 2F

12/02 14:53, , 3F
我是用var = "%" + var + "%" 帶入進去~!
12/02 14:53, 3F

12/02 14:55, , 4F
=> (SELECT * FROM table WHERE name LIKE "%s")% var
12/02 14:55, 4F
文章代碼(AID): #1CfKJbQY (Python)
文章代碼(AID): #1CfKJbQY (Python)