如何在字符串python

时间:2017-06-29 08:59:53

标签: python python-2.7 escaping

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

例如:

  

str =“好的我准备好了”

必须是:

  

str =“好的我准备好了”

     

但是打印str必须是:“好吧我准备好了”

要完成它我已经完成了:

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

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

  

(1064,你“你的SQL语法有错误;请查看手册   对应于您的MySQL服务器版本,以便使用正确的语法   附近的语义搜索软件可以直观地为一切提供动力   chatbots到searc'在第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行,插入affected_rows =   self.cursor.execute(request)File“/var/task/RDS/pymysql/cursors.py”,   第166行,执行result = 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(unbuffered = unbuffered)   文件“/var/task/RDS/pymysql/connections.py”,第1057行,in   _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,你“你有一个   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本,用于在语义附近使用正确的语法   搜索软件可以提供从直观的聊天机器人到searc的所有功能。   在第1行“)

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

有谁知道我该怎么办?

5 个答案:

答案 0 :(得分:5)

您应该添加第二个\

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

答案 1 :(得分:3)

您可以使用双重反弹:

str = "ok I\\'m ready"

编辑: 现在您澄清了,解决问题的方法是json.dumps("I'm")

答案 2 :(得分:3)

这有效,但不是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))

答案 3 :(得分:2)

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

str = r"ok I\'m ready"

无需更换。

答案 4 :(得分:1)

如果您尝试此操作,会在终端中显示"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