데이터 기반 애플리케이션을 구축할 때 데이터베이스는 필수적인 요소이다. Streamlit은 간단한 코드만으로 웹 애플리케이션을 개발할 수 있을 뿐 아니라, SQLite와 같은 데이터베이스와 쉽게 통합할 수 있다. 이번 글에서는 Streamlit과 SQLite를 활용해 CRUD(Create, Read, Update, Delete) 기능이 포함된 데이터 관리 앱을 만드는 방법을 알아보고자 한다.
1. 데이터베이스 통합의 필요성
Streamlit과 데이터베이스를 통합하면 다음과 같은 이점이 있다
- 영구 데이터 저장: 애플리케이션 데이터를 영구적으로 저장하고 관리.
- 복잡한 쿼리 처리: SQL을 활용해 데이터 검색, 필터링, 집계 작업 수행.
- 동적 데이터 관리: 사용자 입력에 따라 데이터 생성, 수정, 삭제.
SQLite는 파일 기반 데이터베이스로, Streamlit과의 통합이 쉽고 사용하기 편리하다.
3. 데이터베이스 설계
SQLite 데이터베이스를 사용하여 간단한 데이터 테이블을 설계한다.
데이터베이스 구조
컬럼명 | 데이터 타입 | 설명 |
---|---|---|
id | INTEGER | 기본 키, 자동 증가 |
name | TEXT | 이름 |
age | INTEGER | 나이 |
profession | TEXT | 직업 |
코드 예제 – Streamlit과 SQLite 통합 CRUD 앱
코드
import sqlite3
import pandas as pd
import streamlit as st
# 데이터베이스 초기화
def init_db():
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL,
profession TEXT NOT NULL
)
""")
conn.commit()
conn.close()
# 데이터 삽입
def insert_user(name, age, profession):
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO users (name, age, profession) VALUES (?, ?, ?)", (name, age, profession))
conn.commit()
conn.close()
# 데이터 읽기
def read_users():
conn = sqlite3.connect("example.db")
df = pd.read_sql("SELECT * FROM users", conn)
conn.close()
return df
# 데이터 업데이트
def update_user(user_id, name, age, profession):
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
cursor.execute("""
UPDATE users
SET name = ?, age = ?, profession = ?
WHERE id = ?
""", (name, age, profession, user_id))
conn.commit()
conn.close()
# 데이터 삭제
def delete_user(user_id):
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
cursor.execute("DELETE FROM users WHERE id = ?", (user_id,))
conn.commit()
conn.close()
# Streamlit 앱 초기화
st.title("Streamlit으로 CRUD 앱 만들기")
init_db()
# 탭 구성
tab1, tab2, tab3, tab4 = st.tabs(["Create", "Read", "Update", "Delete"])
# Create
with tab1:
st.header("👤 사용자 추가")
name = st.text_input("이름")
age = st.number_input("나이", min_value=1, max_value=120, step=1)
profession = st.text_input("직업")
if st.button("추가"):
if name and profession:
insert_user(name, age, profession)
st.success(f"사용자 {name} 추가 완료!")
else:
st.error("모든 필드를 입력해주세요.")
# Read
with tab2:
st.header("📋 사용자 목록")
df = read_users()
st.dataframe(df)
# Update
with tab3:
st.header("✏️ 사용자 수정")
df = read_users()
user_id = st.selectbox("수정할 사용자 선택 (ID)", df["id"])
name = st.text_input("새 이름")
age = st.number_input("새 나이", min_value=1, max_value=120, step=1)
profession = st.text_input("새 직업")
if st.button("수정"):
update_user(user_id, name, age, profession)
st.success("사용자 정보 수정 완료!")
# Delete
with tab4:
st.header("🗑️ 사용자 삭제")
df = read_users()
user_id = st.selectbox("삭제할 사용자 선택 (ID)", df["id"])
if st.button("삭제"):
delete_user(user_id)
st.success("사용자 삭제 완료!")
코드 설명
- 데이터베이스 초기화:
init_db
함수로 데이터베이스와 테이블 생성. - CRUD 함수: 데이터 생성, 읽기, 수정, 삭제를 위한 함수 정의.
- Streamlit UI 구성:
st.text_input
,st.number_input
,st.button
등 위젯을 사용해 CRUD 기능 구현.




이 예제를 통해 Streamlit과 데이터베이스의 통합 과정을 배우고 실습할 수 있다. SQLite와 Streamlit의 간단한 통합으로 강력한 데이터 관리 앱을 만들 수 있으며, 이를 기반으로 다양한 응용 사례를 확장할 수 있다.