【问题标题】:how to insert \ backslash before quotes in string python [duplicate]如何在字符串python中的引号前插入\反斜杠[重复]
【发布时间】:2017-06-29 08:59:52
【问题描述】:

我想在字符串中的每个引号之前插入一个 \ 以使用 pymysql 将其插入到我的 SQL 数据库中。如果我不转义引号,我就无法在我的数据库中插入字符串。

例如:

str = "好的,我准备好了"

必须是:

str = "好的,我准备好了"

但 print str 必须是:“好的,我准备好了”

为了执行它,我已经完成了:

str = str.replace("'", "\'")

但它不起作用,我仍然无法在我的数据库中插入我的字符串。我有错误消息:

(1064, u"您的 SQL 语法有错误;请查看手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 near 的语义搜索软件可以为直观的一切提供动力 聊天机器人在第 1 行搜索“):ProgrammingError Traceback(大多数 最近通话最后):文件“/var/task/setter_organizations.py”,第 38 行, 在处理程序structured_data.insert() 文件中 “/var/task/setter_organizations.py”,第 107 行,插入 self.rds.insertItem(self.type, self.data) 文件 "/var/task/RDS/rds.py", 第 92 行,在 insertItem 中返回 self.insert(req) 文件 “/var/task/RDS/rds.py”,第 35 行,插入受影响的行 = self.cursor.execute(request) 文件 "/var/task/RDS/pymysql/cursors.py", 第 166 行,在执行结果 = self._query(query) 文件中 “/var/task/RDS/pymysql/cursors.py”,第 322 行,在 _query conn.query(q) 中 查询中的文件“/var/task/RDS/pymysql/connections.py”,第 856 行 self._affected_rows = self._read_query_result(无缓冲=无缓冲) 文件“/var/task/RDS/pymysql/connections.py”,第 1057 行,在 _read_query_result result.read() 文件“/var/task/RDS/pymysql/connections.py”,第 1340 行,正在读取 first_packet = self.connection._read_packet() 文件 “/var/task/RDS/pymysql/connections.py”,第 1014 行,在 _read_packet 中 packet.check_error() 文件“/var/task/RDS/pymysql/connections.py”,行 393、在check_error err.raise_mysql_exception(self._data)文件中 “/var/task/RDS/pymysql/err.py”,第 107 行,在 raise_mysql_exception 中 raise errorclass(errno, errval) ProgrammingError: (1064, u"You have an SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于使用 near 语义的正确语法 搜索软件可以为从直观的聊天机器人到搜索引擎的一切提供动力 在第 1 行")

我也会打印我的字符串,但看不到 \

有人知道我该怎么做吗?

【问题讨论】:

  • “它不工作”不是一个足够精确的错误描述,我们无法帮助您。 什么不起作用? 如何它不工作?你的代码有什么问题?您收到错误消息吗?错误信息是什么?你得到的结果不是你期望的结果吗?你期望什么结果,为什么,你得到的结果是什么,两者有什么不同?您正在观察的行为不是期望的行为吗?期望的行为是什么,为什么,观察到的行为是什么,它们有何不同?
  • 这是因为 \ 是一个转义字符。再添加一个就可以了
  • 所以基本上你想在使用 SQL 查询将其插入 SQL 数据库时转义这些字符对吗?
  • 没错@code_byter
  • @JakyChane 请看我的编辑。

标签: python python-2.7 escaping


【解决方案1】:

您应该添加第二个\

your_str= your_str.replace("'", "\\'")

【讨论】:

  • 感谢您的回答,但确实如此:好的,如果我再打印一次,我就准备好了\
  • @JakyChane 不是你所期待的吗?
  • 这是你想要的吧?
  • 不正确。不明白为什么这个答案得到了好几票。
  • 作为助手尝试在解释器>>> repr(s.replace("'", "\'")) 中考虑字符串表示;也请不要隐藏内置的str,使用不同的名称
【解决方案2】:

这可行,但不是 OP 想要的:

str = "ok I'm ready"
str = str.replace("'", "\\'")
print(str)

编辑:

请看一下这个问题:A good way to escape quotes in a database query string?

还有这个:Escape string Python for MySQL 他们使用:

conn.escape_string()

编辑 2: 请看这个: Python pymySQL sending a string with quotes

并注意他们如何使用占位符:

cur.execute('UPDATE connections SET cmd=%s, client_new=1 where ip=%s', (command, ip))

【讨论】:

  • 感谢您的帮助@code_byter,我正在使用pymysql,但我不知道如何使用escape_string
  • @JakyChane 检查我的编辑
【解决方案3】:

没问题,只需在文本前使用r,如下所示:

str = r"ok I\'m ready"

无需更换。

【讨论】:

  • r 表示该字符串将被视为原始字符串。
  • 那么,如何将'r'添加到包含“'”的字符串变量中?
【解决方案4】:

如果你尝试这将在终端中显示"ok I\\'m ready" 实际上它的"ok I\'m ready" 你需要打印它。

结果 '\&' 只显示 - 实际上字符串是 \&:

str = "ok I'm ready"
str = str.replace("'", "\\'")

str = "ok I'm ready".replace("'","\\'")

做,

print str  # python 2

print(str) # python 3

【讨论】:

    【解决方案5】:

    你可以使用双反冲:

    str = "ok I\\'m ready"
    

    编辑: 既然你说清楚了,解决办法就是json.dumps("I'm")

    【讨论】:

    • 但我在打印字符串时看不到 \...
    • @JakyChane 这就是你在描述中提到的内容。
    猜你喜欢
    • 2014-07-26
    • 2010-09-22
    • 2016-08-19
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2013-01-24
    • 2021-03-27
    • 2020-02-22
    相关资源
    最近更新 更多