python - 使用 Python/MySQLdb 转义 MySQL 的 UPDATE 操作字符

标签 python sql python-2.7 escaping mysql-python

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

我找到了一个很棒的 S.O.在这里回答有关使用Python将数据插入MySQL的问题(我使用的是2.7),其中数据包含撇号:Python mySQL - escaping quotes

简而言之,S.O.答案是这样做......

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,它是一个包含撇号的文本 block (谁知道还有什么),我需要一种在更新之前转义特殊字符的方法。我偷偷怀疑我只需要执行这个庞大的例程,我必须专门拼写出我想要找到的字符,但我想看看其他人是否遇到过这个问题。

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

最佳答案

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

从您的 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 设置中转义值。

关于python - 使用 Python/MySQLdb 转义 MySQL 的 UPDATE 操作字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44115990/

相关文章:

python - 如何在 imshow() 的颜色条上添加一条线

python - 如何使用 python 将电子表格/Excel 类型的 View 集成到我的应用程序中?

sql - Impala double值未正确加载

python - 使用 .iterrows() 以更简洁的方式遍历 pandas 数据框中的行,并跟踪特定值之间的行

javascript - AttributeError at/accounts/regist_save/'User' 对象没有属性 'user'

python - Altair 的累积计数

mysql - 将值拆分为其他几列

mysql - 选择五个最高的不同记录

android - 从现有实例调用方法

python - Pandas Python 中的 Dataframe Comprehension 以创建新的 Dataframe