使用 Python/MySQLdb 进行 MySQL 更新操作的转义字符



注意:我发现re.escape(string)可以转义,但是伙计,它逃脱了很多。如果有必要,我可以使用它,但我将这个问题留给任何其他想法,以防将来偶然发现。

我在这里找到了一个很好的S.O.答案,关于使用Python将数据插入MySQL(我使用的是2.7),其中数据包含撇号:Python mySQL - 转义引号

简而言之,SO的答案是这样做.....

sql = "INSERT INTO TABLE_A(COL_A,COL_B) VALUES(%s, %s)"
a_cursor.execute(sql, (val1, val2))

不过,我需要这样做以进行更新。我目前的方法是....

sql = "UPDATE table SET COL_A='R', COL_B='%s', COL_C='%s', COL_D='%s', COL_E='%s',COL_F='%s' WHERE COL_G='%s'" % (val1, val2, val3, val4, val5, val6)
cur.execute(sql)

我得到的错误是:语法中的 1064 错误。

问题是 val5,它是一团包含撇号的文本(谁知道还有什么),我需要一种方法在 UPDATE 之前转义特殊字符。我偷偷怀疑我只需要做这个庞大的例行公事,我必须具体拼写出角色,因为我倾向于找到它们,但我想看看是否有其他人遇到过这个问题。

我感谢任何指向正确方向的指示。

使用 SQL 参数;这些参数被转义并为您引用;请注意,您找到的INSERT查询使用此技术。SQL参数转义可以正确处理撇号,并确保您不会成为SQL注入攻击的受害者,以及其他优点。

sql值中删除参数周围的引号,并将值作为参数传入,不要使用插值:

sql = "UPDATE table SET COL_A='R', COL_B=%s, COL_C=%s, COL_D=%s, COL_E=%s, COL_F=%s WHERE COL_G=%s"
cur.execute(sql, (val1, val2, val3, val4, val5, val6))

或使用多行字符串以获得更好的可读性:

sql = """
UPDATE table
SET
COL_A='R',
COL_B=%s,
COL_C=%s,
COL_D=%s,
COL_E=%s,
COL_F=%s
WHERE COL_G=%s"
cur.execute(sql, (val1, val2, val3, val4, val5, val6))

顺便说一句,re.escape()是一个函数,用于处理您希望在正则表达式中视为文本值的字符串的转义。该函数完全不适合转义 SQL 设置中的值。

最新更新