質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

663閲覧

select時にエスケープ文字を除く方法

akihico

総合スコア27

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2019/06/02 04:12

編集2019/06/02 05:04

■処理の概要

  • Flaskを利用してフォームに入力した文字をMysqlのテーブルに入力
  • Mysqlから該当のレコードを抽出し、その内容をFlaskを利用したページに表示

■困っていること

  • 「あ




お」
とフォームに入力しMysqlのテーブルに挿入

  • そのデータを抽出すると「あ\r\nい\r\nう\r\nえ\r\nお」と表示されてしまう
  • 抽出時も

「あ



お」
と表示させたいです。

  • 「a'b」も「a'b」となってしまいますが、「a'b」と表示させたいです。

■利用環境

  • ubuntu
  • Python3.6
  • Mysql5.7
  • mysql.connector

■ソース

  • 挿入

python3

1sql = """ 2INSERT INTO my_table (description) 3VALUES (%s)""" 4cursor.execute(sql ,description)) 5cursor.execute('commit')
  • 表示

python3

1sql = """ 2select description from my_table 3""" 4cursor.execute(sql) 5descriptions = cursor.fetchall() 6 7for row in descriptions: 8 print(row[0]) 9

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ockeghem

2019/06/02 05:01

二重エスケープみたいな挙動ですね。 あ' (「あ」の後ろにシングルクォート)を登録したら、どう表示されますか?
akihico

2019/06/02 05:06

はい、おっしゃるとおりだと思います。 ご質問の件ですが、「あ\'」と表示されました。
akihico

2019/06/02 05:10

python経由でなく、普通にmysqlのクライアントで"select description from my_table"とすると次のように表示されました。insertの段階でおかしいのでしょうか。 +-------------+ | description | +-------------+ | あ\' | +-------------+
ockeghem

2019/06/02 06:29

INSERTの段階で余計にエスケープしているようです
akihico

2019/06/02 07:04

なんということでしょう。解決しました! insert時に使っている変数descriptionにエスケープ処理を入れていたのが余計でした。 description = connector._cmysql.escape_string(request.form["description"]) ありがとうございますm(_ _)m
guest

回答2

0

自己解決

ockeghemさんとのやり取りで、ミスに気が付き、解決しました。
「cursor.execute(sql ,description))」の段階でエスケープ処理がされるにも関わらず、
前段の「description = connector._cmysql.escape_string(request.form["description"])」でエスケープ処理を入れていました。
そのため、2重にエスケープしていたため、意図しないデータを登録していたことになります。

description = connector._cmysql.escape_string(request.form["description"])
sql = """
INSERT INTO my_table (description)
VALUES (%s)"""
cursor.execute(sql ,description))
cursor.execute('commit')

投稿2019/06/02 07:11

akihico

総合スコア27

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

正規表現 が使えます。

投稿2019/06/02 04:24

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akihico

2019/06/02 04:30 編集

すみません。参照先を見てみましたが、よくわかりませんでした。 insertの時とselectの時のどちらに正規表現の対処が必要でしょうか。 ちょっとトンチンカンな質問をしていたら申し訳ございません。
Orlofsky

2019/06/02 04:52

insert時に \r\n を削りたい時はinsert時に、select時 \r\n を削りたい時はselect時になります。
akihico

2019/06/02 04:58

なるほどです。 「あ\r\nい\r\nう\r\nえ\r\nお」→「あいうえお」 となるということですね。 入力時も表示時も改行あり(下記)で表示したいのですが、その意図が質問になかったので、質問を訂正します。すみませんでした。 「あ い う え お」
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問