※このページではアフィリエイト広告を利用しています

【初心者向け】Raspberry PiでFlaskとSQLiteを使ってデータベース連携する方法

ラズパイ

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)

以下の機能を実装しています:

  1. タスク一覧の表示 (/ ルート)
  2. 新しいタスクを追加するフォーム (/add ルート)
  3. タスクを削除する機能 (/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はユーザーのリクエストを取得するために、redirecturl_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がおすすです。少し値段ははりますが、初心者向けの講座が多いです。

プログラミング言語の人気オンラインコース

おすすめは以下です。

【SQLiteで学ぶ】ゼロから始めるデータベースとSQL超入門

Pythonでデータベース入門

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