SQLの基本をPythonで学ぶ – SQLiteを使ったデータベース操作入門(高校情報Ⅰ×プログラミング)

Pythonでインフォマティクス

SQLとは、「Structured Query Language(構造化問い合わせ言語)」の略称で、リレーショナルデータベース(RDB)に情報を格納したり、検索したりする言語です。

どうやってやるのか、実際手を動かしてみないと、、ということで、SQLの使い方を紹介していきたいと思います!

PythonSQLを操作してみます💡
SQLの基本的な命令(テーブル作成、データ追加、データの抽出)を使えるようになりましょう。




◆サーバー型データベース(例: MySQL, PostgreSQL)
・サーバーが必要:データ管理機能のあるデータベースサーバーが動いていて、データを一元管理しています。
・ネットワーク経由で接続:自分のPCやスマートフォンから、ネットワークを通じてこのサーバーに接続し、必要なデータを受け取ります。
複数人での利用OK: たくさんの人がアクセスしても、トランザクションやロックなどの仕組みでデータ不整合になるのを防ぎます。
(例 オンラインストア(ECサイト)、SNS、銀行のシステムなど)

◆組み込み型データベース(例: SQLite)
サーバーは不要: データベースの機能がアプリケーションやプログラムの中に直接組み込まれています。
手元で完結: ネットワーク接続は必要ありません。自分のPCやスマートフォンの中だけで、データの保存から読み書きまで全てが完結します。
個人利用や小規模な用途が得意: 複数からのアクセスがある場合には向きません。セットアップが不要で、手軽かつ高速に動作します。個人用のデータや、アプリの設定を保存するといった場面で大活躍します。
(例 スマートフォンアプリのセーブデータ、Webブラウザの一時的なデータ保存など)

SQLite https://www.sqlite.org/index.html

データーベース型がちがってもSQLの命令はほとんど同じなので、今回は組み込み型DBであるSQLite(エスキューライト)を利用して、SQLの使い方を学びます

2. SQLの使用を学ぶ準備 Pythonの環境構築

Pythonと、ウェブブラウザ上でプログラミングを実行できるGoogle Colaboratory (Colab) を用いて、SQLの基礎を実践的に体験していきます。

ColabでのPython使い方については、以下の記事をご確認下さい。

Pythonの始め方と使い方 (インストール不要のGoogle Colaboratory)(情報Ⅰプログラミング①)
プログラミング言語のPythonはシンプルな文法で書けるため、様々な領域で使われ、多くの研究者やエンジニア、学生など幅広く利用されています。高校情報Ⅰでは、情報社会の問題解決、コミュニケーションと情報デザイン、コンピュータ、情報通信ネットワ...

💡PythonでSQLを学ぶ利点
・Pythonプログラム内でSQLを実行するため、プログラミングの学習にも繋がる!
・SQLの情報をPythonで取り扱うことで、データ取得後の作業がスムーズに!データ処理の効率化や、データ解析、アプリケーション開発、などにもつなげやすい!

Pythonには、SQLiteを容易に操作するための機能(モジュール)が標準で組み込まれているため、追加の準備なしにすぐ利用を開始できます。

Pythonの構文も活用しつつ、SQL文も使用するので、注意は必要です💡

まず、Colabの新しいセルに以下のPythonコードを入力します。これは、PythonSQLiteを利用することを宣言し、データベースへの接続準備を行うコードです。

# sqlite3モジュールをインポート
import sqlite3

# データベースに接続 ※1
conn = sqlite3.connect(':memory:')

# SQLを実行するための「カーソル」オブジェクトを取得 ※2
cursor = conn.cursor()

※1 :memory: という指定は、ファイルとして保持されない、プログラムの実行中のみ存在する一時的なデータベースをメモリ上に作成します。
※2 カーソル(cursor)は、命令(SQL文)をデータベースに伝え、データベースで実行された結果を受け取る役割があります。

sqlite3にconnect(‘:memory:’)する ➢ conn
connというデータベース接続オブジェクトの、cursor()という機能を実行する conn.cursor() ➢ cursor

3. テーブルの作成

データベースでは、情報をテーブル(表)形式の構造で整理します。

★SQL テーブルの作成:
CREATE TABLE テーブル名 (
列名1 型,
列名2 型,
列名3 型, …);

例として、簡単な「ともだちリスト (friends)」テーブルを作成します。このテーブルには、名前 (name) と年齢 (age) の情報を記録できるようにします。

# テーブルを作成するためのSQL文(Pythonでは文字列として記述します)
sql_create_table = """
CREATE TABLE friends (
id INTEGER PRIMARY KEY, -- 各友達を一意に識別するための番号(主キー)
name TEXT, -- 名前(文字列データ)
age INTEGER -- 年齢(整数データ)
);
"""

# SQL文の実行
cursor.execute(sql_create_table)

# データベースへの変更を確定
conn.commit()

Pythonでは、#~は、コードとして認識されず、#以降はコメントとして使用できました。
SQLでは、データベースシステムによって#に対するルールが異なります。–は、どのデータベースシステムでも–以降はコード認識なく、コメントとして使えます。SQL文でコメントを入れる際は、–を使用してください。

このSQL文(上記緑字部分)では、以下の列(フィールド)を持つテーブルfriendsを設計しました。
id:各レコードを一意に識別するための番号で、「主キー (PRIMARY KEY)」として設定します。データ型は整数 (INTEGER) です。
name:名前を記録するための列で、データ型は文字列 (TEXT) です。
age:年齢を記録するための列で、データ型は整数 (INTEGER) です。

4. データの挿入

テーブルが作成できたら、次に実際のデータをテーブルに挿入します。

★SQL データの挿入:
INSERT INTO テーブル名 (列名1, 列名2, …)
VALUES (値1, 値2, …);

#「friends」テーブルにデータを追加するSQL文
sql_insert_data1 = "INSERT INTO friends (name, age) VALUES ('山田 太郎', 16);"
sql_insert_data2 = "INSERT INTO friends (name, age) VALUES ('佐藤 花子', 17);"
sql_insert_data3 = "INSERT INTO friends (name, age) VALUES ('鈴木 一郎', 16);"
sql_insert_data4 = "INSERT INTO friends (name, age) VALUES ('田中 次郎', 18);"

#SQL文をそれぞれ実行します
cursor.execute(sql_insert_data1)
cursor.execute(sql_insert_data2)
cursor.execute(sql_insert_data3)
cursor.execute(sql_insert_data4)

#データベースへの変更を確定します
conn.commit()

文字列データはシングルクォーテーション ‘ ‘ で囲みます。

5. データの取り出し

データベースからデータを取り出してみます。SELECT文を使用します。

5.1 全データ表示

★SQL 全データ表示:
SELECT *
FROM テーブル名;

sql_select_all = """
SELECT * 
FROM friends;
"""

#SQL文を実行し、結果を取得します
cursor.execute(sql_select_all)
all_friends_data = cursor.fetchall() # 全ての結果行をリストとして取得します

print("--- ともだちリスト (全件) ---")
for friend_record in all_friends_data:
 print(f"ID: {friend_record[0]}, 名前: {friend_record[1]}, 年齢: {friend_record[2]}")
## 出力結果
#--- ともだちリスト (全件) ---
#ID: 1, 名前: 山田 太郎, 年齢: 16
#ID: 2, 名前: 佐藤 花子, 年齢: 17
#ID: 3, 名前: 鈴木 一郎, 年齢: 16
#ID: 4, 名前: 田中 次郎, 年齢: 18

cursor.fetchall() メソッドは、検索結果の全行をリスト形式で返します。リストの各要素は一行分のデータ(Pythonではタプルという形式)です。

5.2 特定の列を選択

★SQL 列指定:
SELECT 列名1, 列名2, …
FROM テーブル名;

「名前と年齢の列だけが見たい」とします。

sql_select_name_age ="""
SELECT name, age 
FROM friends;
"""

cursor.execute(sql_select_name_age)
name_age_records = cursor.fetchall()

print("--- ともだちリスト (名前と年齢のみ) ---")
for record in name_age_records:
 print(f"名前: {record[0]}, 年齢: {record[1]}")
## 出力結果
#--- ともだちリスト (名前と年齢のみ) ---
#名前: 山田 太郎, 年齢: 16
#名前: 佐藤 花子, 年齢: 17
#名前: 鈴木 一郎, 年齢: 16
#名前: 田中 次郎, 年齢: 18

5.3 条件に合うデータを抽出

★SQL 条件指定のデータ抽出:
SELECT 列名1, 列名2, …
FROM テーブル名
WHERE 条件;

「年齢が16歳の友達の情報だけを見たい」とします。

sql_select_where_condition ="""
SELECT name, age 
FROM friends 
WHERE age = 16;
""" # 年齢が16という条件

cursor.execute(sql_select_where_condition)
friends_age_16 = cursor.fetchall()

print("--- ともだちリスト (16歳限定) ---")
for record in friends_age_16:
 print(f"名前: {record[0]}, 年齢: {record[1]}")
## 出力結果
#--- ともだちリスト (16歳限定) ---
#名前: 山田 太郎, 年齢: 16
#名前: 鈴木 一郎, 年齢: 16

ここでは age = 16 とすることで、「年齢が16である」という条件を指定しました。

📢 条件の書き方(比較演算子)例
・WHERE age > 17 (17歳より大きい(18歳以上))
・WHERE age < 20 (20歳未満)
・WHERE age >= 18 (18歳以上)
・WHERE age <= 16(16歳以下)
・WHERE age != 16  あるいは WHERE age <> 16(16歳ではないデータのみ)

5.4 補足:データの並べ替え

★SQL データの並べ替え:
SELECT 列名1, 列名2, …
FROM テーブル名
ORDER BY 列名 ASC;  —昇順 降順の場合はDESC

取得した結果を特定の順番(例えば年齢の昇順や降順)に並べ替えたい場合は、ORDER BYを利用します。

sql_select_orderby_age = """
SELECT name, age 
FROM friends 
ORDER BY age ASC;""" # 年齢の昇順 (ASC)

cursor.execute(sql_select_orderby_age)
sorted_friends_list = cursor.fetchall()

print("--- ともだちリスト (年齢順に並び替え) ---")
for record in sorted_friends_list:
 print(f"名前: {record[0]}, 年齢: {record[1]}")

# 降順(値が大きい順)にしたい場合は DESC を指定します。
# 例: sql_select_orderby_age_desc = "SELECT name, age FROM friends ORDER BY age DESC;"

SQLの基本的なデータの取りだしを学びました。

他にも、Pythonの公式サイトにSQLiteのチュートリアルありますので、こちらもご参考にされてください💡

sqlite3 --- SQLite データベース用の DB-API 2.0 インターフェース
ソースコード: Lib/sqlite3/ SQLite は、軽量なディスク上のデータベースを提供する C ライブラリです。別のサーバプロセスを用意する必要なく、 SQL クエリー言語の非標準的な一種を使用してデータベースにアクセスできます。...
6. まとめ

今回は、PythonGoogle Colaboratoryを用いて、データベース言語SQLの基本的な操作を実践的に学びました。
・SQLは、データベースから情報を取り出したり、データを管理したりするための強力な言語である
Pythonの sqlite3 モジュールを利用することで、Google Colabのような環境でも手軽にデータベースを作成し、SQLを実行できることを体験しました。
CREATE TABLEでデータのテーブルを設計し、INSERT INTO でデータを格納、そしてSELECT (FROM, WHERE, ORDER BYなど) を用いて柔軟にデータ検索を行うという、一連の基本的な流れを実践できました。

SQLを扱えるようになることは、大量のデータの中から必要な情報だけを効率的に抽出し、活用するための重要なスキルです。現代社会では、データを効果的に利用する能力が一層求められています。
今回の学習が、皆さんのSQLとPythonを用いたデータ活用への第一歩となり、更なる興味や探求心に繋がることを願っています。

◆情報Ⅰ+確認クイズ(毎週月曜配信予定)
◆情報Ⅰ×プログラミング(月2回配信予定)
◆情報Ⅰプログラミング×化学(月2回配信予定)

高校情報Ⅰ データベースの基礎と活用(リレーショナルデータベース・SQL入門)(3か月目第2週)
★本サイトの取り組み方★ ①まなびの目標🎯を理解し、使われる場面をイメージしましょう。②最後の確認クイズ💡で、学んだことをしっかりチェックしましょう。まなびの目標🎯・データベースを理解する。・リレーショナルデータベース(表)を理解する。・デ...
高校情報Ⅰ 情報セキュリティ(3か月目第1週)
★本サイトの取り組み方★ ①まなびの目標🎯を理解し、使用するケースを学ぶ。②最後の確認クイズ💡でインプットを確認する。まなびの目標🎯・情報を守る3つの基本(機密性・完全性・可用性)を理解しよう・情報を安全にやり取りする仕組みを知ろう・危険か...
Pythonでデータを扱う!リスト, 辞書, グラフ描画matplotlib(情報Ⅰプログラミング④)
Pythonでは、データを扱うためのリストや辞書などの仕組みが用意されています。また、分析したデータをグラフにすることで、見た目にもわかりやすく伝えることができます。今回の記事では、Pythonの基本的なデータ構造と可視化を紹介します!■目...

本記事に対し、お気づきの点ございましたらお問い合わせよりご連絡頂けますと幸いです。




コメント

タイトルとURLをコピーしました