2017-06-29 12 views
-4

pymysqlを使用してSQLデータベースに挿入するために、各引用符を文字列の前に挿入したいとします。引用符をエスケープしないと、データベースに文字列を挿入できません。 exempleについては文字列の引用符の前に backslashを挿入する方法

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) 

EDIT:A good way to escape quotes in a database query string?

そして、この他の1:

この質問を見てみてくださいEscape string Python for MySQL 彼らは使用:

conn.escape_string() 

EDIT 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

あなたの答えをありがとう、それはありません:ok私は2番目を置く場合印刷する準備が整いました\ –

+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'は文字列が生の文字列として扱われることを意味します。 –

+0

次に、 ''を含む文字列変数に 'r'をどのように追加しますか? – tong

関連する問題