Streamlit応用編 第8回: データベースとの連携
こんにちは、JS2IIUです。続けて投稿していきます。第8回です。よろしくお願いします。
はじめに
第8回目の今回は、Streamlitアプリケーションとデータベースとの連携について解説します。データベースに接続し、データを読み書きする方法や、ORM(オブジェクト関係マッピング)を使ってデータベース操作を簡略化する方法を試してみたいと思います。
SQLiteやPostgreSQLとの接続
SQLiteとの接続
SQLiteは、軽量で使いやすいデータベースで、ローカル環境での開発や小規模なアプリケーションに最適です。以下のコードは、SQLiteデータベースに接続し、テーブルを作成し、データを挿入および取得する基本的な例です。
import sqlite3
import streamlit as st
# SQLiteデータベースに接続
conn = sqlite3.connect('example.db')
c = conn.cursor()
# テーブルの作成
c.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')
# データの挿入
if st.button("データを挿入"):
c.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 25))
conn.commit()
st.write("データが挿入されました")
# データの取得
c.execute("SELECT * FROM users")
rows = c.fetchall()
# データの表示
st.write("ユーザー情報:")
for row in rows:
st.write(row)
# 接続を閉じる
conn.close()
このコードでは、example.dbという名前のSQLiteデータベースを作成し、usersというテーブルを定義しています。「データを挿入」ボタンをクリックすると、名前と年齢がテーブルに挿入され、挿入されたデータが表示されます。応用編第2回: インタラクティブなウィジェットの応用で試したForm入力と組み合わせることでより実用的なアプリができると思います。
ちょっと調子に乗って3回クリックしてしまいました・・・データはデータベースに格納されるので、ブラウザでページ再読み込みしても記憶したままになります。
PostgreSQLとの接続
PostgreSQLは、強力で拡張性の高いリレーショナルデータベース管理システムです。以下のコードは、PostgreSQLデータベースに接続し、データを操作する基本的な例です。
psycopg2が必要です。インストールは、$ pip install psycopg2です。PostgreSQLはインストール済みの想定です。
import streamlit as st
import psycopg2
# PostgreSQLデータベースに接続
conn = psycopg2.connect(
host="localhost",
database="exampledb",
user="yourusername",
password="yourpassword"
)
c = conn.cursor()
# テーブルの作成
c.execute('''CREATE TABLE IF NOT EXISTS users
(id SERIAL PRIMARY KEY, name TEXT, age INTEGER)''')
# データの挿入
if st.button("データを挿入"):
c.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("Bob", 30))
conn.commit()
st.write("データが挿入されました")
# データの取得
c.execute("SELECT * FROM users")
rows = c.fetchall()
# データの表示
st.write("ユーザー情報:")
for row in rows:
st.write(row)
# 接続を閉じる
conn.close()
このコードでは、exampledbという名前のPostgreSQLデータベースに接続し、usersテーブルにデータを挿入して表示します。
PostgreSQLアダプタのpsycopg2についてはこちらのページを参照してください。
ORM(例: SQLAlchemy)との統合
データベース操作を簡略化するために、ORMを使うと便利です。ORMを使うことで、データベース操作をPythonのオブジェクトとして扱えるようになり、SQLクエリを直接書かなくてもデータベースとやり取りができます。ここでは、SQLAlchemyというORMライブラリを使用した例を紹介します。
SQLAlchemyの基本的な使い方
以下のコードは、SQLAlchemyを使ってデータベースに接続し、データを操作する基本的な例です。SQLAlchemyのインストールは、$ pip install SQLAlchemy です。
import streamlit as st
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# SQLiteデータベースに接続(SQLAlchemyを使用)
engine = create_engine('sqlite:///example.db')
Base = declarative_base()
# モデルの定義
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
# テーブルの作成
Base.metadata.create_all(engine)
# セッションの作成
Session = sessionmaker(bind=engine)
session = Session()
# データの挿入
if st.button("データを挿入"):
new_user = User(name="Charlie", age=35)
session.add(new_user)
session.commit()
st.write("データが挿入されました")
# データの取得
users = session.query(User).all()
# データの表示
st.write("ユーザー情報:")
for user in users:
st.write(f"ID: {user.id}, Name: {user.name}, Age: {user.age}")
# セッションを閉じる
session.close()
このコードでは、SQLAlchemyを使ってUserというモデルを定義し、SQLiteデータベースに接続しています。session.query(User).all()を使ってデータベースからすべてのユーザーを取得し、Streamlit上に表示します。
sqlalchemyについてはこちらを参照してください。
まとめ
第8回目では、Streamlitアプリとデータベースとの連携について学びました。SQLiteやPostgreSQLへの接続方法や、SQLAlchemyを使ったORMの基本的な使い方を解説しました。これにより、データの読み書きが簡単になり、より複雑なデータ操作も容易に行えるようになります。
次回は、複雑なデータビジュアライゼーションについて学びます。PlotlyやBokehの統合や、3Dビジュアライゼーションの実装方法について詳しく解説しますので、お楽しみに!
最後まで読んでいただきありがとうございました。73