Streamlitでデータベースを使ったアプリの作り方

Python

アプリイメージ

データベースの作成

今回はデータベースとしてsqlite3を使っていきたいと思います。
まずはSqlite3でデータベースのテーブルを作成しておきます。

import sqlite3

# SQLiteデータベースを作成
conn = sqlite3.connect('example.db')
c = conn.cursor()

# テーブルを作成
c.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT)''')

# データベースに変更を保存
conn.commit()
conn.close()

import sqlite3

この行では、Pythonの標準ライブラリである sqlite3 をインポートしています。これはSQLiteデータベースを操作するためのライブラリです。

# SQLiteデータベースを作成
conn = sqlite3.connect('example.db')

ここでは、SQLiteデータベースを作成するために sqlite3.connect を使用しています。'example.db' という名前のSQLiteデータベースファイルに接続しています。もし指定したデータベースファイルが存在しない場合、新しいデータベースファイルが作成されます。

c = conn.cursor()

この行では、SQLiteデータベースとの対話を行うためにカーソル(cursor)を作成しています。カーソルはSQLクエリの実行やデータの操作を行うためのインタフェースを提供します。

# テーブルを作成
c.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT)''')

ここでは、SQLiteデータベース内に新しいテーブルを作成しています。テーブルの名前は “users” で、3つの列を持っています。列の名前とデータ型は次の通りです:
id: INTEGER型の主キー(PRIMARY KEY)
name: TEXT型
email: TEXT型

このコードは、テーブルがまだ存在しない場合にのみテーブルを作成しています。既にテーブルが存在する場合、新たに作成はしません。

# データベースに変更を保存
conn.commit()

データベースへの変更を保存するために、conn.commit() を呼び出しています。これにより、テーブルの作成がデータベースに反映されます。

conn.close()

最後に、データベース接続をクローズしています。データベースの作成とテーブルの作成が完了した後、データベース接続を閉じ忘れないようにしましょう。

アプリ部分のコード作成

続いて、アプリ部分のコードは以下のように作成します。
基本的には一覧の表示と新しいデータの追加を行っているシンプルなものです。
これでデータベースの使い方のイメージを持っていただければと思います。

# 必要なライブラリをインポート
import streamlit as st
import sqlite3

# データベースに接続
conn = sqlite3.connect('example.db')
c = conn.cursor()

# Streamlitアプリケーションを定義
st.title('データベースアプリ')

# データベースからユーザー一覧を取得する関数
def fetch_users():
    result = c.execute("SELECT * FROM users").fetchall()
    return result

# ユーザー一覧を表示
st.write("ユーザー一覧:")
users = fetch_users()
for row in users:
    st.write(f"ID: {row[0]}, 名前: {row[1]}, メール: {row[2]}")

# ユーザー情報の入力フォーム
st.subheader("新しいユーザーを追加")
new_name = st.text_input("名前")
new_email = st.text_input("メール")

# フォームが送信されたらデータベースに新しいユーザーを挿入
if st.button("追加"):
    c.execute("INSERT INTO users (name, email) VALUES (?, ?)", (new_name, new_email))
    conn.commit()
    st.success("ユーザーが追加されました")

# データベース接続をクローズ
conn.close()

コードの解説

# 必要なライブラリをインポート
import streamlit as st
import sqlite3

この部分では、streamlit および sqlite3 ライブラリをインポートしています。streamlit はアプリケーションのUIを構築するために使用され、sqlite3 はSQLiteデータベースとの対話を可能にします。

# データベースに接続
conn = sqlite3.connect('example.db')
c = conn.cursor()

ここでは、SQLiteデータベースに接続しています。sqlite3.connect('example.db')example.db という名前のSQLiteデータベースに接続します。この接続を使用してデータベースを操作できます。

# Streamlitアプリケーションを定義
st.title('データベースアプリ')

ここでは、Streamlitアプリケーションのタイトルを設定しています。このタイトルはアプリケーションのUIに表示されます。

# データベースからユーザー一覧を取得する関数
def fetch_users():
    result = c.execute("SELECT * FROM users").fetchall()
    return result

この部分では、データベースからユーザー一覧を取得するための関数 fetch_users を定義しています。この関数はSQLクエリを使用してデータベースからユーザー情報を取得し、結果を返します。

# ユーザー一覧を表示
st.write("ユーザー一覧:")
users = fetch_users()
for row in users:
    st.write(f"ID: {row[0]}, 名前: {row[1]}, メール: {row[2]}")

ここでは、ユーザー一覧を表示しています。st.write("ユーザー一覧:") はユーザー一覧のタイトルを表示し、fetch_users 関数を使用してユーザー情報を取得し、それをループで表示しています。

# ユーザー情報の入力フォーム
st.subheader("新しいユーザーを追加")
new_name = st.text_input("名前")
new_email = st.text_input("メール")

この部分では、新しいユーザー情報を入力するためのフォームを表示しています。st.subheader("新しいユーザーを追加") はフォームのタイトルを表示し、st.text_input を使用して名前とメールの入力フィールドを表示しています。

# フォームが送信されたらデータベースに新しいユーザーを挿入
if st.button("追加"):
    c.execute("INSERT INTO users (name, email) VALUES (?, ?)", (new_name, new_email))
    conn.commit()
    st.success("ユーザーが追加されました")

この部分では、フォームが送信されたときに新しいユーザー情報をデータベースに挿入するコードがあります。st.button("追加") は「追加」ボタンを表示し、ボタンがクリックされると新しいユーザー情報がデータベースに挿入され、成功メッセージが表示されます。

# データベース接続をクローズ
conn.close()

最後に、データベース接続をクローズして、データベースリソースを解放しています。このコードがないと、データベースが正しく閉じられない可能性があります。

使い方イメージ

データを追加

ユーザー名とメールアドレス入力し、データベースにデータを追加します。
データの追加

データの表示

そのままだと変更が反映されないので、リロードすると一覧が表示されます。
データ追加後

データベースが使えるようになるとできることの幅が広がるので、ぜひ、データベースの使い方をマスターしてください!
GoogleColabのコード

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