こんにちは、JS2IIUです。
Streamlitはデータベースと接続して活用することもできます。書籍管理データベースを例にして基本的なデータベース操作とStreamlit上での表示についてみていきましょう。今回もよろしくお願いします。
はじめに
この記事では、StreamlitアプリからSQLデータベースに接続してデータを表示・登録する方法を、初めての方にもわかりやすく解説します。
例として、「書籍管理システム」を題材に、以下のような機能を実装します:
- 書籍データの一覧表示
- 書籍情報の登録(フォームから入力)
SQLiteという簡易なデータベースを使うため、特別なインストールやサーバー設定は不要です。気軽に学び始められます!
使用するライブラリ
以下のPythonライブラリを使用します。
pip install streamlit pandas使用ライブラリ一覧:
- Streamlit:Webアプリを簡単に作成できるフレームワーク
- sqlite3:Python標準ライブラリのデータベースモジュール
- pandas:表形式のデータ操作に便利なライブラリ
ステップ1:データベースの準備
まずは、書籍データを管理するためのSQLiteデータベースを作成しましょう。
# 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アプリからデータベースにアクセスするための関数を作成します。
import sqlite3
def get_connection():
"""データベース接続を返す関数"""
return sqlite3.connect("books.db")この関数を使って、毎回簡単に接続を確立できるようにします。
ステップ3:Streamlitアプリの作成
いよいよメインとなるStreamlitアプリの作成です。
📄 ファイル名例:book_app.py
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:アプリの実行
ターミナルまたはコマンドプロンプトで以下を実行してください。
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 著。下田、牧、長尾訳。機械学習のトピックスについて手を動かしながら網羅的に学べる書籍です。ぜひ手に取ってみてください。
最後まで読んでいただきありがとうございます。


コメント