为MySQL转义Python字符串

81 投票
7 回答
166162 浏览
提问于 2025-04-16 03:34

我用Python和MySQLdb来下载网页并把它们存储到数据库里。现在我遇到的问题是,无法把复杂的字符串保存到数据库中,因为它们没有被正确处理。

在Python中有没有什么函数可以用来处理字符串,以便能在MySQL中使用?我试过用'''(三重单引号)和""",但都不行。我知道PHP有mysql_escape_string()这个函数,Python里有没有类似的东西呢?

谢谢。

7 个回答

19
>>> import MySQLdb
>>> example = r"""I don't like "special" chars ¯\_(ツ)_/¯"""
>>> example
'I don\'t like "special" chars \xc2\xaf\\_(\xe3\x83\x84)_/\xc2\xaf'
>>> MySQLdb.escape_string(example)
'I don\\\'t like \\"special\\" chars \xc2\xaf\\\\_(\xe3\x83\x84)_/\xc2\xaf'

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

85

MySQLdb这个库其实会帮你处理这些事情,如果你使用它提供的方法来构建SQL查询字符串,而不是自己去拼凑。

不要这样做:

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

应该这样做:

sql = "INSERT INTO TABLE_A (COL_A,COL_B) VALUES (%s, %s)"
cursor.execute(sql, (val1, val2))
105
conn.escape_string()

查看MySQL C API函数的对应关系:http://mysql-python.sourceforge.net/MySQLdb.html

撰写回答