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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2636閲覧

mysql select % python

syu-yu

総合スコア24

MySQL

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

3クリップ

投稿2018/05/14 10:58

不明な点
python コードにおけるselect 検索コードの書き方

やりたいこと
pythonコード上におけるselect ~~like %xxxx%による部分検索

python

1list = ["kobayasi","takahashi","T'K hayashi"] 2def select_name(p_name): 3 with connection.cursor() as cursor: 4 select_id_name = "select id,name from "\ 5 "class where name like" + "'" + '%' + "\ 6 "p_name + '%' + "'" 7 cursor.execute(select_id_name) 8 result_all = cursor.fetchall() 9 return result_company_number 10for i in list: 11 print(select_name(i))

この場合、kobayashiとtakahashiの部分検索は通るのですが、T'K hayashi の場合、
「’」をmysqlが誤認してしまうようでエラー表示が出されます。
一通り調べて見ましたが、わかりませんでした。
お手数ですが、よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

シングルコーテーション(')はSQLにおいて、文字データを示すための引用符になります。
今回、組み立てようとしているSQL文でp_nameに"T'K hayashi"が展開された場合、以下のようになります。

SQL

1select id,name from class where name like '%T'K hayashi%'

この場合、引用符がマッチしていないというエラーにしているわけです。
(もしかすると、"K hayashi%"という不明な語句があると見ているかもしれませんが)

今回、"T'K hayashi"の中のシングルコーテーションは単なる文字として扱いたいので、エスケープして引用符と見做さないようにします。エスケープの仕方はMySQL - 文字列リテラルにもありますが、T'K hayashi"を"T\'K hayashi"とします。
こうすることで、

SQL

1select id,name from class where name like '%T\'K hayashi%'

となり、SQL側で引用符として見ないで、文字として扱うようになります。

追記:
後は先々のことを考えて、プリペアド・ステートメントをつかうようにした方が良いかもしれません。
pythonからMySQLのプリペアド・ステートメントを利用する方法についてはMySQL Connector/PythonからSQLを投げるを参考にしてみてください。
(また、同ページに専用関数を用いたエスケープの方法も掲載されていますので、そちらにも目を通しておくと良いでしょう)

投稿2018/05/14 15:05

編集2018/05/14 21:46
archiver

総合スコア1557

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

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

syu-yu

2018/05/15 01:47

夜分遅く、また朝早くご回答ありがとうございました! 試してみましたが、期待通りの結果になりました! また、おっしゃる通り「"K hayashi%」のエラーが出ていました。 今後はエラーの内容も記述したいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問