【Streamlit】SQLデータベースと連携してデータを表示

Streamlit
この記事は約8分で読めます。

こんにちは、JS2IIUです。
Streamlitはデータベースと接続して活用することもできます。書籍管理データベースを例にして基本的なデータベース操作とStreamlit上での表示についてみていきましょう。今回もよろしくお願いします。

はじめに

この記事では、StreamlitアプリからSQLデータベースに接続してデータを表示・登録する方法を、初めての方にもわかりやすく解説します。

例として、「書籍管理システム」を題材に、以下のような機能を実装します:

  • 書籍データの一覧表示
  • 書籍情報の登録(フォームから入力)

SQLiteという簡易なデータベースを使うため、特別なインストールやサーバー設定は不要です。気軽に学び始められます!

使用するライブラリ

以下のPythonライブラリを使用します。

Bash
pip install streamlit pandas

使用ライブラリ一覧:

  • Streamlit:Webアプリを簡単に作成できるフレームワーク
  • sqlite3:Python標準ライブラリのデータベースモジュール
  • pandas:表形式のデータ操作に便利なライブラリ

ステップ1:データベースの準備

まずは、書籍データを管理するためのSQLiteデータベースを作成しましょう。

Python
# create_books_db.py
import sqlite3

# データベース接続(なければ自動作成)
conn = sqlite3.connect("books.db")
c = conn.cursor()

# booksテーブルの作成
c.execute("""
CREATE TABLE IF NOT EXISTS books (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    author TEXT NOT NULL,
    published_year INTEGER
)
""")

# サンプルデータを追加(任意)
sample_books = [
    ("吾輩は猫である", "夏目漱石", 1905),
    ("人間失格", "太宰治", 1948),
    ("雪国", "川端康成", 1947),
]

c.executemany("INSERT INTO books (title, author, published_year) VALUES (?, ?, ?)", sample_books)

conn.commit()
conn.close()
print("データベースとテーブルを作成しました。")

上記スクリプトを1回実行することで、books.db というファイルが作成され、サンプルデータも追加されます。

ステップ2:データベース接続関数の作成

Streamlitアプリからデータベースにアクセスするための関数を作成します。

Python
import sqlite3

def get_connection():
    """データベース接続を返す関数"""
    return sqlite3.connect("books.db")

この関数を使って、毎回簡単に接続を確立できるようにします。

ステップ3:Streamlitアプリの作成

いよいよメインとなるStreamlitアプリの作成です。

📄 ファイル名例:book_app.py

Python
import streamlit as st
import pandas as pd
import sqlite3

def get_connection():
    """データベース接続を返す関数"""
    return sqlite3.connect("books.db")


st.title("📚 書籍管理アプリ")

# タブで機能を分ける
tab1, tab2 = st.tabs(["📖 書籍一覧", "➕ 書籍登録"])

# 書籍一覧表示
with tab1:
    st.header("📖 登録された書籍一覧")
    conn = get_connection()
    df = pd.read_sql_query("SELECT * FROM books", conn)
    conn.close()

    st.dataframe(df, use_container_width=True)

# 書籍登録フォーム
with tab2:
    st.header("➕ 新しい書籍を登録")

    with st.form("book_form", clear_on_submit=True):
        title = st.text_input("書籍名", max_chars=100)
        author = st.text_input("著者名", max_chars=50)
        year = st.number_input("出版年", min_value=1000, max_value=9999, step=1)

        submitted = st.form_submit_button("登録する")

        if submitted:
            if title and author:
                conn = get_connection()
                cursor = conn.cursor()
                cursor.execute(
                    "INSERT INTO books (title, author, published_year) VALUES (?, ?, ?)",
                    (title, author, int(year))
                )
                conn.commit()
                conn.close()
                st.success("✅ 書籍を登録しました!")
            else:
                st.warning("⚠️ 書籍名と著者名は必須です。")

ステップ4:アプリの実行

ターミナルまたはコマンドプロンプトで以下を実行してください。

Bash
streamlit run book_app.py

ブラウザが開き、Streamlitアプリが表示されます。

よくあるエラーと対処法

エラー原因対処方法
no such table: booksテーブルが作成されていないcreate_books_db.py を先に実行
database is locked同時アクセスの競合接続のクローズを確認する
文字化けデータに日本語が含まれている場合Streamlitとエディタの文字コードをUTF-8に統一

まとめ

この記事では、StreamlitとSQLiteを使って、以下の内容を学びました:

  • PythonでSQLデータベース(SQLite)を扱う方法
  • Streamlitでデータの表示・登録を行う方法
  • シンプルな書籍管理アプリの実装

この方法は、顧客管理や在庫管理などにも応用できます。次のステップとして、MySQLやPostgreSQLなどの本格的なRDBMSへの接続にもチャレンジしてみてください。

参考リンク

最後に書籍のPRです。
24年11月に第3版が発行された「scikit-learn、Keras、TensorFlowによる実践機械学習 第3版」、Aurélien Géron 著。下田、牧、長尾訳。機械学習のトピックスについて手を動かしながら網羅的に学べる書籍です。ぜひ手に取ってみてください。

最後まで読んでいただきありがとうございます。

コメント

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