我想在我的字符串中的每个引号之前插入一个\,使用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行“)
我也会打印我的字符串而看不到\
有谁知道我该怎么办?
答案 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