Streamlit과 데이터베이스 완벽 통합 가이드: SQLite로 CRUD 앱 만들기

Posted by

데이터 기반 애플리케이션을 구축할 때 데이터베이스는 필수적인 요소이다. Streamlit은 간단한 코드만으로 웹 애플리케이션을 개발할 수 있을 뿐 아니라, SQLite와 같은 데이터베이스와 쉽게 통합할 수 있다. 이번 글에서는 Streamlit과 SQLite를 활용해 CRUD(Create, Read, Update, Delete) 기능이 포함된 데이터 관리 앱을 만드는 방법을 알아보고자 한다.

1. 데이터베이스 통합의 필요성

Streamlit과 데이터베이스를 통합하면 다음과 같은 이점이 있다

  • 영구 데이터 저장: 애플리케이션 데이터를 영구적으로 저장하고 관리.
  • 복잡한 쿼리 처리: SQL을 활용해 데이터 검색, 필터링, 집계 작업 수행.
  • 동적 데이터 관리: 사용자 입력에 따라 데이터 생성, 수정, 삭제.

SQLite는 파일 기반 데이터베이스로, Streamlit과의 통합이 쉽고 사용하기 편리하다.

3. 데이터베이스 설계

SQLite 데이터베이스를 사용하여 간단한 데이터 테이블을 설계한다.

데이터베이스 구조

컬럼명데이터 타입설명
idINTEGER기본 키, 자동 증가
nameTEXT이름
ageINTEGER나이
professionTEXT직업

코드 예제 – 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의 간단한 통합으로 강력한 데이터 관리 앱을 만들 수 있으며, 이를 기반으로 다양한 응용 사례를 확장할 수 있다.

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다