全1091文字

データベースを扱うには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よりも大きいデータだけを抽出できました。