2017-06-29 244 views
-4

我想在我的字符串中的每个引号之前插入一个\以使用pymysql将其插入到我的SQL数据库中。如果我不逃避引号,我不能在我的数据库中插入字符串。如何在字符串python中引号前插入反斜杠

对于为例:

str = "ok I'm ready"

必须是:

str = "ok I\'m ready"

but print str must be : "ok I'm ready"

要执行它,我已经做了:

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

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

(1064, u"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Semantic Search software can power everything from intuitive chatbots to searc' at line 1"): ProgrammingError Traceback (most recent call last): File "/var/task/setter_organizations.py", line 38, in handler structured_data.insert() File "/var/task/setter_organizations.py", line 107, in insert self.rds.insertItem(self.type, self.data) File "/var/task/RDS/rds.py", line 92, in insertItem return self.insert(req) File "/var/task/RDS/rds.py", line 35, in insert affected_rows = self.cursor.execute(request) File "/var/task/RDS/pymysql/cursors.py", line 166, in execute result = self._query(query) File "/var/task/RDS/pymysql/cursors.py", line 322, in _query conn.query(q) File "/var/task/RDS/pymysql/connections.py", line 856, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) File "/var/task/RDS/pymysql/connections.py", line 1057, in _read_query_result result.read() File "/var/task/RDS/pymysql/connections.py", line 1340, in read first_packet = self.connection._read_packet() File "/var/task/RDS/pymysql/connections.py", line 1014, in _read_packet packet.check_error() File "/var/task/RDS/pymysql/connections.py", line 393, in check_error err.raise_mysql_exception(self._data) File "/var/task/RDS/pymysql/err.py", line 107, in raise_mysql_exception raise errorclass(errno, errval) ProgrammingError: (1064, u"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Semantic Search software can power everything from intuitive chatbots to searc' at line 1")

我也将打印我的字符串,并没有看到\

有谁知道我该怎么办?

+0

“它不工作”并不是一个足够准确的错误描述,可以帮助我们。 *什么*不起作用? *如何*不工作?你的代码有什么问题?你有错误信息吗?什么是错误信息?你得到的结果不是你期待的结果吗?你期望得到什么结果?为什么?你得到的结果是什么?两者有什么不同?你正在观察的行为不是所期望的行为?什么是期望的行为,为什么,观察到的行为是什么,以及它们以何种方式不同? –

+0

这是因为\是一个转义字符。添加另一个,你很好 – Florian

+0

所以基本上你想逃避这些字符时,你插入到SQL数据库使用SQL查询正确吗? –

回答

0

这可行,但不是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)) 
+0

感谢您的帮助@code_byter,我使用pymysql,我不知道如何使用escape_string –

+0

@JakyChane检查我的编辑 –

5

您应该添加第二\

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

谢谢你的回答,但它确实如此:好吧,我打印时准备好了,如果我放了第二个\ –

+0

@JakyChane是不是你所期待的? –

+0

这是你想要的权利? –

2

您可以使用双反弹:

str = "ok I\\'m ready" 

编辑: 既然你澄清,解决它的方法是json.dumps("I'm")

+0

但是当我打印字符串时,我不会看到...... –

+0

@JakyChane这就是你在描述中提到的。 –

0

如果您尝试这将在终端上显示"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 
2

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

str = r"ok I\'m ready" 

无需更换。

+0

'r'表示该字符串将被视为原始字符串。 – 2017-06-29 09:28:37

+0

那么,如何将“r”添加到包含“'”的字符串变量? – tong