2017-06-29 246 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