Raspberry Piは小型で多機能なコンピュータであり、さまざまなプロジェクトに利用できます。その中でも、FlaskとSQLiteを組み合わせてWebアプリケーションを構築することは、データベースとの連携を学ぶのに非常に有用です。
この記事では、Raspberry PiでFlaskとSQLiteを使ってデータベースとの連携を行う方法を解説しています。
必要な準備
- Raspberry Piのセットアップ(Raspberry Pi OSがインストールされていること)
- Python3のインストール
- Flask、SQLiteのインストール
Raspberry Piの準備
まずは、Raspberry Piが正しくセットアップされていることを確認します。Raspberry Pi OSがインストールされている状態で、ターミナルを開いて次のコマンドで必要なパッケージをインストールします。
sudo apt update
sudo apt install python3-pip
次に、FlaskとSQLite3をインストールします。
pip3 install flask
SQLiteはPythonに標準で搭載されているため、追加のインストールは不要です。
Flaskをインストール方法の詳細は以下をご参照下さい。
>>>Raspberry PiでローカルWebサーバーを構築する方法
Flaskアプリケーションの作成
Flaskは軽量なWebフレームワークであり、データベースとの連携が簡単に行えます。ここでは、SQLiteデータベースを利用したシンプルなタスク管理アプリケーションを作成します。
プロジェクトのディレクトリを作成
まず、プロジェクトのためのディレクトリを作成します。
mkdir flask_sqlite_project
cd flask_sqlite_project
アプリケーションのファイルを作成
app.py
というファイルを作成し、Flaskの基本的な設定を記述します。
from flask import Flask, render_template, request, redirect, url_for
import sqlite3
app = Flask(__name__)
# SQLiteデータベースとの接続
def get_db_connection():
conn = sqlite3.connect('tasks.db')
conn.row_factory = sqlite3.Row
return conn
# タスク一覧ページ
@app.route('/')
def index():
conn = get_db_connection()
tasks = conn.execute('SELECT * FROM tasks').fetchall()
conn.close()
return render_template('index.html', tasks=tasks)
# 新しいタスクを追加するページ
@app.route('/add', methods=['POST'])
def add_task():
title = request.form['title']
conn = get_db_connection()
conn.execute('INSERT INTO tasks (title) VALUES (?)', (title,))
conn.commit()
conn.close()
return redirect(url_for('index'))
# タスクを削除するページ
@app.route('/delete/<int:id>')
def delete_task(id):
conn = get_db_connection()
conn.execute('DELETE FROM tasks WHERE id = ?', (id,))
conn.commit()
conn.close()
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
以下の機能を実装しています:
- タスク一覧の表示 (
/
ルート) - 新しいタスクを追加するフォーム (
/add
ルート) - タスクを削除する機能 (
/delete/<id>
ルート)
HTMLテンプレートの作成
次に、templates
というディレクトリを作成し、その中にindex.html
というファイルを作成します。このファイルはタスク一覧を表示するHTMLテンプレートです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>タスク管理アプリ</title>
</head>
<body>
<h1>タスク管理アプリ</h1>
<h2>タスク一覧</h2>
<ul>
{% for task in tasks %}
<li>{{ task['title'] }} <a href="{{ url_for('delete_task', id=task['id']) }}">削除</a></li>
{% endfor %}
</ul>
<h2>新しいタスクを追加</h2>
<form method="POST" action="{{ url_for('add_task') }}">
<input type="text" name="title" placeholder="タスクを入力" required>
<button type="submit">追加</button>
</form>
</body>
</html>
このHTMLファイルでは、Flaskから渡されたtasks
をループ({% for task in tasks %})してタスクを表示し、新しいタスクを追加するためのフォームを用意しています。
SQLiteデータベースの作成
アプリケーションがデータベースにアクセスできるように、tasks.db
というSQLiteデータベースを作成し、tasks
というテーブルを用意します。
データベースの初期化
まず、以下のスクリプトをinit_db.py
というファイル名で作成します。
import sqlite3
# データベースを作成してテーブルを作成
def init_db():
conn = sqlite3.connect('tasks.db')
c = conn.cursor()
c.execute('''
CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL
)
''')
conn.commit()
conn.close()
if __name__ == '__main__':
init_db()
このスクリプトを実行することで、SQLiteデータベースとテーブルが作成されます。実行するには、ターミナルで以下のコマンドを入力します。
python3 init_db.py
これで、tasks.db
データベースと、tasks
テーブルが作成され、タスクを保存する準備が整いました。
結果
/your-flask-app
/templates
index.html
app.py
tasks.db
Flaskのフォルダ内構成になります。「dasks.db」が生成されていることを確認して下さい。
アプリケーションの実行
すべてが整ったら、app.py
を実行してFlaskアプリケーションを起動します。
python3 app.py
ブラウザで http://localhost:5000
にアクセスすると、タスク管理アプリケーションが表示されます。タスクを追加したり、削除したりすることができます。
結果

まとめ
この記事では、Raspberry Pi上でFlaskとSQLiteを使ってデータベース連携を行う方法を説明しました。Flaskはシンプルで使いやすいWebフレームワークであり、SQLiteは軽量なデータベースシステムとして非常に便利です。この組み合わせで、簡単なWebアプリケーションを作成することができます。
さらにこのアプリケーションを発展させることで、ユーザー認証や複雑なデータ処理など、より多機能なWebアプリケーションを作ることができます。難易度は高めですが。
この記事を参考に、FlaskとSQLiteを使って自分だけのWebアプリケーションを作ってみてください。
【補足】プログラム解説
以下は、プログラムの解説になります。適宜、ご参照下さい。
Flaskのインポートとアプリケーションの設定
from flask import Flask, render_template, request, redirect, url_for
import sqlite3
app = Flask(__name__)
最初に必要なモジュールをインポートしています。Flask
はFlaskアプリケーションを作成するために、render_template
はHTMLテンプレートをレンダリングするために、request
はユーザーのリクエストを取得するために、redirect
とurl_for
はリダイレクトを行うために使います。sqlite3
はSQLiteデータベースを操作するためのライブラリです。
次に、Flaskアプリケーションのインスタンスを作成しています。app = Flask(__name__)
とすることで、このファイルがFlaskアプリケーションの開始点になります。
SQLiteデータベースへの接続
def get_db_connection():
conn = sqlite3.connect('tasks.db')
conn.row_factory = sqlite3.Row
return conn
get_db_connection
という関数を定義して、SQLiteデータベースへの接続を行っています。この関数を使うと、tasks.db
というデータベースに接続できるようになります。
conn.row_factory = sqlite3.Row
とすることで、データベースの結果を辞書形式で取得できます。
タスク一覧ページ
@app.route('/')
def index():
conn = get_db_connection()
tasks = conn.execute('SELECT * FROM tasks').fetchall()
conn.close()
return render_template('index.html', tasks=tasks)
@app.route('/')
は、ユーザーがWebブラウザで/
にアクセスしたときに、このindex
関数が実行されることを示しています。この関数では、tasks.db
から全てのタスクを取得してindex.html
テンプレートに渡します。
conn.execute('SELECT * FROM tasks')
は、SQLiteのtasks
テーブルから全てのタスクを取得するSQLクエリです。fetchall()
で結果をリストとして取得しています。
新しいタスクを追加するページ
@app.route('/add', methods=['POST'])
def add_task():
title = request.form['title']
conn = get_db_connection()
conn.execute('INSERT INTO tasks (title) VALUES (?)', (title,))
conn.commit()
conn.close()
return redirect(url_for('index'))
@app.route('/add', methods=['POST'])
は、ユーザーが新しいタスクを追加したときに、この関数を実行することを示しています。request.form['title']
でフォームから送信されたタスクのタイトルを取得し、それをtasks
テーブルに挿入します。
conn.commit()
で変更を確定し、その後、conn.close()
でデータベース接続を閉じます。最後に、redirect(url_for('index'))
で、タスク一覧ページにリダイレクトします。
タスクを削除するページ
@app.route('/delete/<int:id>')
def delete_task(id):
conn = get_db_connection()
conn.execute('DELETE FROM tasks WHERE id = ?', (id,))
conn.commit()
conn.close()
return redirect(url_for('index'))
@app.route('/delete/<int:id>')
は、URLに指定されたIDを使ってタスクを削除するためのルートです。id
パラメータを取得し、そのIDに対応するタスクをDELETE
SQLクエリで削除します。削除後、タスク一覧ページにリダイレクトします。
データベースについて勉強する場合、以下のUdemyがおすすです。少し値段ははりますが、初心者向けの講座が多いです。