連載
イチから全部作ってみよう(32)PythonでSQLを実行してデータベースを操作する:山浦恒央の“くみこみ”な話(201)(2/4 ページ)
ソフトウェア開発の全工程を学ぶ新シリーズ「イチから全部作ってみよう」。第32回は、さらに一歩踏み込み、PythonプログラムからSQLを実行してデータベースを操作する方法を解説する。
4.今回のお題:ワイン商品テーブルの構築
今回のお題は、Pythonプログラムを用いて、以下の仕様に基づいた商品テーブルを作成し、データの登録/抽出を行うことです(表1、表2)。
| データ項目 | 説明 | データ型 | 備考 |
|---|---|---|---|
| id | 商品ID | INTEGER | 主キー(Primary Key:テーブル内の各レコードを一意に識別するための列であり、重複およびNULLを許可しない制約のこと) |
| name | 商品名 | TEXT | |
| image | 商品画像 | TEXT | 画像のファイル名 |
| vintage | ビンテージ | INTEGER | 製造年 |
| winery | 生産者 | TEXT | |
| price | 商品価格 | INTEGER | 販売価格 |
| stock | 在庫数 | INTEGER | 現在の在庫数 |
| 表1 商品テーブル | |||
| 商品ID | 商品名 | 画像 | ビンテージ | 生産者 | 商品価格 | 在庫数 |
|---|---|---|---|---|---|---|
| 1 | ブルゴーニュ ピノノワール | img1.png | 2022 | ドメーヌ・ヤマモト | 5000 | 10 |
| 2 | ブルゴーニュ ピノノワール | img2.png | 2023 | ドメーヌ・スズキ | 10000 | 20 |
| 3 | ブルゴーニュ シャルドネ | img3.png | 2021 | ドメーヌ・ヤマダ | 4300 | 4 |
| 4 | ブルゴーニュ シャルドネ | img4.png | 2021 | ドメーヌ・ササキ | 3670 | 8 |
| 表2 商品データ | ||||||
なお、ここでは、Pythonの文法説明は最小限にとどめ、データベースの操作に焦点を当てます。
4.1 データベースの作成
まずは、プログラムからデータベースファイル(.db)を生成します(図3)。
4.1.1 SQLiteで実行する場合
SQLiteで実行する場合は、次のコマンドを実行します。
sqlite3 EC_Database.db
コマンドを実行すると、指定した「EC_Database.db」が存在しない場合は新規作成し、存在する場合はそのファイルを開きます。
4.1.2 Pythonで実行する場合
Pythonでは、標準ライブラリのsqlite3モジュールのconnect関数を使用しますので、以下のようにimportしてください。
import sqlite3
# データベースを作成(存在しない場合は新規作成)
db = sqlite3.connect("EC_Database.db")
# 切断
db.close()
4.1.3 実行方法
Pythonの実行方法は、コマンドプロンプトから次のコマンドを入力します。
python ファイル名.py
実行後、Pythonファイルと同階層にEC_Database.dbがあればOKです。
4.1.4 Pythonプログラムの解説
Pythonプログラムの解説を下記に示します。
- (1)import sqlite3
SQLiteを操作するための標準ライブラリを読み込みます - (2)connect関数
指定した名前のデータベースに接続します。ファイルが存在しない場合は、新規作成となります - (3)close関数
データベースの接続を終了します
4.2 テーブルの作成
データベースが作成できたので、データを格納するテーブルを定義します(図4)。
4.2.1 SQLiteで実行する場合
SQLiteで実行するには、CREATE TABLE文を使います。
CREATE TABLE IF NOT EXISTS Product ( id INTEGER PRIMARY KEY, name TEXT, image TEXT, vintage INTEGER, winery TEXT, price INTEGER, stock INTEGER );
4.2.2 Pythonで実行する場合
Pythonで実行するには、次のように記述します。
import sqlite3
# データベースに接続し、一連の処理を実行する
with sqlite3.connect("EC_Database.db") as db:
db.execute("""
CREATE TABLE IF NOT EXISTS Product (
id INTEGER PRIMARY KEY,
name TEXT,
image TEXT,
vintage INTEGER,
winery TEXT,
price INTEGER,
stock INTEGER
)
""")
4.2.3 Pythonプログラムの解説
Pythonプログラムの解説を下記に示します。
- (1)with構文
ブロック内の処理が終了すると、接続を自動的に切断します - (2)connect関数
データベースに接続します - (3)executeメソッド
引数に渡したCREATE TABLE文を実行します
Copyright © ITmedia, Inc. All Rights Reserved.