gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:57:05 28 4
gpt4 key购买 nike

注意:我发现 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com