如何在Python 2.7中转义字符串中的特殊字符

时间:2017-06-27 08:26:30

标签: python python-2.7 escaping unicode-escapes

我正在寻找为Python 2.7转义字符串中的特殊字符。

例如,如果我有:

  

str =“你是地球上最好的”狗“。

我会:

  

str =“你是地球上最好的狗”。

我想要它,因为我使用pymySQL在SQL数据库中插入字符串,我找不到办法来做到这一点。

我想逃避字符必须是这样的? (不太确定) 我也会找到一种方法来执行反向操作删除escpaing字符。

2 个答案:

答案 0 :(得分:2)

你正在以完全错误的方式接近这一点。在将字符串插入SQL数据库时,永远不需要转义特殊字符:始终使用参数化SQL查询,并且将为您完成任何所需的转义。如果您开始尝试自己逃避字符串,则会打开代码以解决各种安全问题。

with connection.cursor() as cursor:
    # Create a new record
    sql = "INSERT INTO `mytable` (`thestring`) VALUES (%s)"
    cursor.execute(sql, (str,))

如果您发现自己使用来自任何外部源停止并重新考虑的数据构建查询字符串:您永远不需要这样做。

答案 1 :(得分:1)

您不需要为了SQL 的目的而手动转义值!让数据库API处理这个问题。

  1. 在Python源代码中形成有效的字符串文字:

    str = "You're the best \"dog\" on earth."
    str = 'You\'re the best "dog" on earth.'
    str = """You're the best "dog" on earth."""
    

    这些都是等价的,您只需要转义您作为字符串文字终止符使用的适当引号。

  2. 正确使用数据库API,不用担心转义。来自the manual

    sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
    cursor.execute(sql, ('webmaster@python.org', 'very-secret'))
    

    通过分离查询和值来处理转义,而不是通过添加反斜杠来处理。