注目キーワード

【Python】SQLite(sqlite3)SELECT文のサンプルソース

はじめに

この記事では、Pythonのsqlite3を使ってテーブルのデータの抽出(SELECT)を行う処理について説明しています。

具体的には単純なSELECT文、条件を絞り込んだSELECT、テーブル同士をJOINした場合のSELECTについてのサンプルソースを使いながら解説していきたいと思います。

前提条件

  • SQLの基本知識があること
  • SQLiteの操作ができること

SQLite(sqlite3)の操作方法については以下の記事にまとめています。興味のある方はご覧ください。

工事中

データの抽出(SELECT)

始めにテーブルのデータをそのままSELECTして出力するプログラムを作っていきます。まず、テーブルについて説明します。「TEST」テーブルはinteger型のidとtext型のnameを持つテーブルです。そして「猫、蛇、ライオン、イルカ、ゾウ」に5種類の動物が登録されています。

$sqlite3.exe sample.db$ select * from TEST;
データの確認

下のソースが「TEST」からデータを抽出するプログラムになります。

2行目の「 import sqlite3 」でSQLの操作が可能になります。

4,5行目で「sample.db」に接続して操作ができる状態にしています。9行目の「 con.close() 」と合わせて疎通のおまじないと思ってて問題ないでしょう。

con = sqlite3.connect('./sample.db')cur = con.cursor()・・・con.close()

「sqlite_select1.py」の6行目でSELECTのSQLを実行します。そして、7行目のループ処理で取得したレコードを1件1件取得しています。取得したレコードは配列の中に格納されています。

また、取得したレコードはカンマ区切りで出力するようにしています。

実行結果が以下になります。5種類の動物が出力されていますね。

sqlite_select1.py 実行結果

条件を追加してSELECTする

次にidを指定してデータをSELECTするプログラムを作ってみましょう。コマンドラインからidを引数として受け取り一致したidのレコードを出力するようにします。

コマンドラインの引数受け取りに関しては以下の記事にて説明しています。

また、パラメータを動的にしたい場合は「?」を使うと便利です。

cur.execute("SELECT * FROM TEST WHERE id = ?", id)

それでは実際に実行してみましょう。登録されているデータは先ほどと同じです。

始めはidが3のデータをSELECTしてみましょう。「 sqlite_select2.py 」のパラメータは一番目の引数にidを指定します。ちなみに引数を指定しないとエラーで落ちます。サンプルソースなので勘弁してください。

3を指定して実行すると正しく、「3,ライオン」のデータが出力されました。

idに3を指定してsqlite_select2.pyを実行

5を指定すると「5,ゾウ」が出力されました。

idに5を指定してsqlite_select2.pyを実行

テーブルをJOINしたデータを抽出する

今回は複数のテーブルをJOINしてほしいカラムだけ取得するプログラムを作ってみます。

color

カラム名
color_idinteger
colortext

fruit

スポンサーリンク

カラム名
idinteger
nametext
color_idinteger
weightinteger

データは以下のように登録されています。

そうしたらデータを投入します。以下のSQLを打ち込みます。

colorテーブルの仕込み
fruitテーブルの仕込み

これでデータの仕込みが終わりました。試しにJOINしたSQLを叩いてみましょう。

SELECT fruit.name, color.color FROM fruit JOIN color ON fruit.color_id = color.color_id;
SQL実行

下のプログラムは先ほどの「 sqlite_select1.py 」のSQLの部分を変えたプログラムになっています。(一部出力処理も変えてます。)取得するカラムを絞り込んでおり「fruit.name」と「color.color」のみ取得するようになっています。

実行結果を見ると、取得したカラムが正しく取得できていることが分かります。

sqlite_select3.py実行

まとめ

パラメータを動的に設定したい場合は「?」を使う。

SELECT結果は配列で取得される。

for文を使って1レコードづつ出力が可能。