こんにちは、Tech Samuraiです!
前回のWebアプリ入門シリーズでは、Flaskを使ってインタラクティブなWebアプリを構築しましたね。しかし、あのアプリには一つ、大きな弱点がありました。それは、ブラウザを閉じたり、サーバーを停止したりすると、**入力したデータが全て消えてしまう**ことです。
今回から始まる新シリーズでは、この問題を解決し、あなたのWebアプリに**永続的な「記憶力」**を与えるための技術、**データベース**を探検します!
そのための武器として、Pythonに標準で組み込まれている**`sqlite3`**ライブラリを使います。SQLiteは、大規模なサーバーを必要とせず、単一のファイルとしてデータベースを扱える、非常に手軽でありながら強力なツールです。例えるなら、「プログラム専用の超高性能なExcelファイル」のようなもの。インストール不要で、すぐに始められます!
第1回は、Flaskから一旦離れ、純粋なPythonスクリプトだけで**データベースの作成、データの追加、そしてデータの読み込み**という、基本操作をマスターします。
ステップ1:データベースの言語「SQL」に触れる
データベースを操作するには、**SQL (Structured Query Language)** という専用の言語を使います。心配しないでください、今回はその中でも超基本的な命令しか使いません。Pythonのコードの中に、SQLの命令文を文字列として書いて実行する、というイメージです。
CREATE TABLE
: データを格納するための「表」を作成する。INSERT INTO
: 表に新しいデータを一行追加する。SELECT
: 表からデータを読み出す。
これらの呪文を、これから順番に見ていきましょう。
ステップ2:データベースへの接続と「表」の作成
まずは、データベースファイルに接続し、投稿を保存するための「表(テーブル)」を作成します。
import sqlite3
# 1. データベースに接続する(ファイルがなければ自動で作成される)
conn = sqlite3.connect('guestbook.db')
# 2. カーソルを取得する
# カーソルは、SQL命令を実行するための「司令官」のようなもの
cursor = conn.cursor()
# 3. テーブルを作成するSQL文
# IF NOT EXISTS をつけると、既にテーブルが存在する場合にエラーにならない
create_table_sql = """
CREATE TABLE IF NOT EXISTS posts (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
message TEXT NOT NULL
);
"""
# 4. SQL文を実行
cursor.execute(create_table_sql)
# 5. 接続を閉じる
conn.close()
print("データベースとテーブルの準備が完了しました。")
このスクリプトを実行すると、同じフォルダに`guestbook.db`というファイルが作成されます。これが私たちのデータベース本体です。
ステップ3:データの追加 (`INSERT`) と保存 (`COMMIT`)
次に、作成した`posts`テーブルに、新しい投稿データを追加します。
import sqlite3
conn = sqlite3.connect('guestbook.db')
cursor = conn.cursor()
# --- データを追加 ---
# ? はプレースホルダーと呼ばれ、後から安全に値を埋め込むための目印
sql = "INSERT INTO posts (name, message) VALUES (?, ?)"
data_to_insert = ("Tech Samurai", "初めての投稿です!")
cursor.execute(sql, data_to_insert)
# --- 変更をデータベースに保存(コミット) ---
# これを実行しないと、変更がファイルに反映されない!
conn.commit()
conn.close()
print("新しい投稿を追加しました。")
【重要ポイント:`conn.commit()`】
データの追加や変更を行った後、`conn.commit()`を実行することで、初めてその変更がデータベースファイルに永続的に保存されます。「セーブボタンを押す」ようなイメージです。これを忘れると、プログラムを終了したときに変更が消えてしまうので注意してください。
ステップ4:データの読み込み (`SELECT`)
最後に、データベースに保存されている全ての投稿を読み込んで、表示してみましょう。
import sqlite3
conn = sqlite3.connect('guestbook.db')
cursor = conn.cursor()
# --- データを全て読み出す ---
# * は「全ての列」を意味する
sql = "SELECT * FROM posts"
cursor.execute(sql)
# 実行結果を全て取得する
all_posts = cursor.fetchall()
conn.close()
print("--- 掲示板の投稿一覧 ---")
if all_posts:
for post in all_posts:
# post は (id, name, message) というタプル形式になっている
print(f"ID: {post[0]}, 名前: {post[1]}, メッセージ: {post[2]}")
else:
print("まだ投稿はありません。")
前のステップで追加した「Tech Samurai」の投稿が表示されれば成功です!
まとめと次回予告
今回は、Webアプリに「記憶力」を与えるための第一歩として、Pythonの標準ライブラリ`sqlite3`を使ったデータベースの基本操作を学びました。
- データベースに接続し、**テーブル(表)**を作成する方法。
- `INSERT`文でデータを**追加**し、`commit()`で**保存**する流れ。
- `SELECT`文でデータを**読み出す**方法。
あなたは今、プログラムのデータを永続的に保存し、いつでも取り出せるという、アプリケーション開発における非常に重要なスキルを身につけました。
さて、Python単体でデータベースを操作できるようになったら、次はいよいよこれをWebの世界と繋ぎ込みます。次回、第2回では、**FlaskアプリケーションとこのSQLiteデータベースを連携させ、Webフォームから投稿されたメッセージをデータベースに保存する**処理を実装します。お楽しみに!
コメント