SQLiteを使う準備をまとめた投稿もあります。合わせてお読みください。
▶ コマンドプロンプトやPowerShellからSQLite3を起動して直接データベースを作る場合は以下の投稿をご覧ください。
はじめに
前回は、PythonからMySQLに接続をして、データを追加してみました。今回は、条件を指定してデータを抽出する方法をみてみましょう。データの抽出は、select文でしたね。PythonからはどのようにSQL文を実行するのかを実際に確認してみましょう。
データを抽出する場合も前回と同様にMySQLとの接続からです。作業の流れは次のようになります。
- MySQLとの接続
- カーソル作成
- カーソルからSQL発行
- カーソルからデータ読み込み
事前準備
PythonからMySQLに接続してカーソルを作成するところまでは、前回と同じなので、コードだけ記述しておきます。以下のコードを打ち込めばカーソルの作成までは完了です。
# ライブラリのインポート
import MySQLdb
# データベースとの接続
conn=MySQLdb.connect(host='localhost',user='root',passwd='',db='testdb',charset='utf8')
# カーソルを作る
cursor=conn.cursor()
これで準備ができました。あとは、データを抽出するためのSQL文を作っていくだけです。
データを抽出する
では、さっそくデータを抽出するためのSQL文をつくっていきましょう。前回と同じように「sql」という変数にSQL文を格納することにしましょう。前回のtestdbというデータベースの、testtableというテーブルからデータを抽出してみます。ここではお名前が「石井」となるデータを抽出してみましょう。
# SQL文を作る
sql="select * from testtable where name='%s'"%('石井')
sql
念のため作成したSQL文をみてみると、上記のようにちゃんとできてますね。あとは、前回と同様にこのSQL文を発行します。次のようにします。
cursor.execute(sql)
この数字は、処理した行数のことでしたね。今回のSQL文はselect文なので、データの抽出結果が返っています。これを取り出す必要があります。cursorにはSQL文を発行した後に、SQL文を実行した結果が格納されています。これを取り出すにはfetchall()というメソッドを使って次のようにします。
result=cursor.fetchall()
result
このように、結果がタプルのタプルとして返ってきています。※今回は1レコードのみですが、複数のレコードが条件に合致した場合は、1レコードが1タプルとなって、タプルのタプルの形で返ってきます。
これも実際に試してみましょう。
sql="select * from testtable"
cursor.execute(sql)
result=cursor.fetchall()
result
これを1つずつ取り出すことでデータを扱うことができます。たとえば、お名前だけを取り出すのであれば、次のようにすることができます。
for item in result:
print(item[0])
まとめ
いかがでしょうか?今回はPythonからデータベースを操作してデータを抽出する方法を学びました。データベースよくわかんない、って思ってましたけど、この辺の基本的な内容を整理すると、少しは理解が進むかもしれませんね。頑張ろう。次回は、Pythonからcsvファイルをデータベースに登録する操作を学びます。
コメント