データベースを扱うにはSQLの知識が不可欠です。Pythonに付属の「SQLite 3」を使えば、SQLデータベースのプログラミングを手軽に始められます。本特集では、SQLite 3を使ってSQLの基本的な使い方を解説します。
SQLで最も頻繁に使われるのはSELECT文だと言えます。ここまでは「SELECT * FROM テーブル名」でテーブルのすべてのデータを取得するという使い方しかしてきませんでしたが、SELECT文にはもっといろいろな機能があります。それらを解説しましょう。
なお、SQLは複数行に分けて書くことができます。以降では見やすいように、改行とインデントを使って複数行で記述します。
対話モードを起動して、ここまでに作成したpurchase.dbに接続しましょう。カーソルも作ります。
>>> import sqlite3
>>> dbpath = 'purchase.db'
>>> conn = sqlite3.connect(dbpath)
>>> cursor = conn.cursor()
まずは列名を指定してpurchaseテーブルからデータを取り出してみましょう。商品名(name)の列を指定する場合は次のようなSQLになります。Pythonの「'''」〜「'''」を使って改行付きの文字列で記述します。
>>> sql = '''
... SELECT
... name
... FROM
... purchase
... '''
ここまで使っていた「*」の代わりに、列名を指定しただけですね。
このSQLを実行して、データを表示してみます。
>>> cursor.execute(sql)
<sqlite3.Cursor object at 0x000001E045A5AF10>
>>> print(cursor.fetchall())
[('マスク',), ('フェイスシールド',), ('アルコール液',), ('除菌シート',), ('手袋',), ('アクリルパーティション',)]
商品名だけが表示されました。
「WHERE句」で条件を指定してデータを絞り込む
ここまではすべてのデータを表示していました。そうではなく、設定した条件に合ったデータだけを取得して、表示するようにしましょう。
SQLで条件を指定してデータを絞り込みたい場合は「WHERE句」を使います。「SELECT〜FROM〜WHERE」のように記述します。書式は次の通りです。
SELECT
列名, ...
FROM
テーブル名
WHERE
条件式
WHERE句の後ろに記述する条件式は、例えば「quantity > 5」のようになります。これで、「購入数が5よりも大きい」という条件を表現しています。
では、quantity > 5の条件式を使って、データを取得してみます。SQLは次のようになります。
>>> sql = '''
... SELECT
... *
... FROM
... purchase
... WHERE
... quantity > 5
... '''
続けて、SQLを実行します。
>>> cursor.execute(sql)
<sqlite3.Cursor object at 0x000001E045A5AF10>
>>> print(cursor.fetchall())
[('2021/01/04', 'マスク', 20), ('2021/01/11', '除菌シート', 10), ('2021/01/12', '手袋', 10)]
購入数が5よりも大きいデータだけを抽出できました。