Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python/MySQLdb对MySQL进行更新操作的转义字符_Python_Sql_Python 2.7_Escaping_Mysql Python - Fatal编程技术网

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

使用Python/MySQLdb对MySQL进行更新操作的转义字符,python,sql,python-2.7,escaping,mysql-python,Python,Sql,Python 2.7,Escaping,Mysql Python,注意:我发现re.escape(string)可以逃逸,但是人,它逃逸很多。如果有必要的话,我可以用它,但我会把这个问题留给任何其他想法,以防将来偶然发现 我在这里找到了一个很好的S.O.答案,关于使用Python将数据插入MySQL(我使用的是2.7),其中数据包含撇号: 简而言之,S.O.的答案是这样做 sql = "INSERT INTO TABLE_A(COL_A,COL_B) VALUES(%s, %s)" a_cursor.execute(sql, (val1, val2)) 不过

注意:我发现re.escape(string)可以逃逸,但是人,它逃逸很多。如果有必要的话,我可以用它,但我会把这个问题留给任何其他想法,以防将来偶然发现

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

简而言之,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,它是一个包含撇号的文本块(谁知道还有什么),我需要一种在更新之前转义特殊字符的方法。我有一种隐秘的怀疑,那就是我将不得不做这种大规模的例行工作,我必须明确地拼写出角色,因为我倾向于找到它们,但我想看看是否还有其他人有这个问题


我欣赏任何指向正确方向的指针。

使用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设置中转义值。

我最终使用了一个函数来转义单个撇号。不过我不会选择我自己的答案。所有这些花哨的引用都是在你的实际代码中吗?或者你是否在某个地方使用了一个编辑器来插入它们<代码>'R'无效,因为这些引号,请使用
'R'
。不确定,但我只使用常规单引号。