Streamlit에 SQLite 데이터베이스 적용

Streamlit에 SQLite 데이터베이스 적용

Streamlit
Streamlit에 SQLite 데이터베이스 적용
Author

gabriel yang

Published

September 11, 2024


Streamlit에서 SQLite 데이터베이스를 생성하고 활용하는 방법을 소개합니다. SQLite는 파일 기반의 경량 데이터베이스로, 서버 설치 없이 손쉽게 사용할 수 있기 때문에 빠르게 데이터베이스 기능을 구현할 수 있습니다.

1. SQLite란?

SQLite는 서버가 필요 없는 파일 기반의 관계형 데이터베이스 관리 시스템입니다. 소규모 프로젝트나 테스트 환경에서 유용하게 사용되며, 단일 파일로 데이터베이스를 생성하고 관리할 수 있습니다. 이로 인해 설정이 간편하고, 별도의 복잡한 환경 구성 없이 로컬에서 바로 데이터베이스 작업을 수행할 수 있습니다.


2. Streamlit에서 SQLite를 사용하는 이유

  • 경량 데이터베이스: 서버 없이 사용할 수 있는 파일 기반 데이터베이스입니다.
  • 간편한 설정: 복잡한 설정 없이 파이썬 표준 라이브러리인 sqlite3를 이용하여 데이터베이스와 바로 연동할 수 있습니다.
  • Streamlit과 연동: Streamlit과 SQLite를 연동하여 데이터를 쉽게 저장하고, 조회할 수 있습니다.

3. 필요한 라이브러리

SQLite는 파이썬 표준 라이브러리인 sqlite3로 제공되므로, 추가적인 설치 없이 바로 사용할 수 있습니다.

import sqlite3
import streamlit as st
import pandas as pd

4. SQLite 데이터베이스 생성과 테이블 설정

먼저, SQLite 데이터베이스 파일을 생성하고 필요한 테이블을 정의하는 방법을 설명합니다. 이 과정은 한 번만 실행되면 됩니다.

import sqlite3

# SQLite 데이터베이스 연결 (파일이 없으면 새로 생성)
conn = sqlite3.connect('mydatabase.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
    )
''')

# 변경사항 저장
conn.commit()

# 연결 종료
conn.close()

코드 설명

  1. 데이터베이스 생성: sqlite3.connect('mydatabase.db')를 사용하여 데이터베이스에 연결합니다. 파일이 없으면 자동으로 생성됩니다.
  2. 테이블 생성: CREATE TABLE IF NOT EXISTS 쿼리를 사용해 users라는 테이블을 생성합니다. 테이블에는 id, name, age 열이 있으며, id는 기본 키로 자동 증가합니다.
  3. 변경사항 저장: 테이블 생성 후 commit()을 호출하여 변경사항을 저장합니다.

5. 데이터 삽입과 조회

SQLite 데이터베이스에 데이터를 삽입하고, 저장된 데이터를 조회하는 Streamlit 애플리케이션을 작성합니다.

5.1 데이터 삽입 함수

# SQLite 데이터베이스 연결 함수
def create_connection():
    conn = sqlite3.connect('mydatabase.db')
    return conn

# 데이터 삽입 함수
def insert_user(name, age):
    conn = create_connection()
    cursor = conn.cursor()
    cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', (name, age))
    conn.commit()
    conn.close()

5.2 데이터 조회 함수

# 데이터 조회 함수
def get_users():
    conn = create_connection()
    df = pd.read_sql_query("SELECT * FROM users", conn)
    conn.close()
    return df

5.3 Streamlit 애플리케이션 코드

이제 Streamlit 애플리케이션에서 사용자의 입력을 받아 SQLite 데이터베이스에 저장하고, 저장된 데이터를 조회하는 예시를 작성하겠습니다.

import streamlit as st
import sqlite3
import pandas as pd

# SQLite 데이터베이스 연결 함수
def create_connection():
    conn = sqlite3.connect('mydatabase.db')
    return conn

# 테이블 생성 함수 (앱 실행 시 테이블이 없으면 생성)
def create_table():
    conn = create_connection()
    cursor = conn.cursor()
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            age INTEGER NOT NULL
        )
    ''')
    conn.commit()
    conn.close()

# 데이터 삽입 함수
def insert_user(name, age):
    conn = create_connection()
    cursor = conn.cursor()
    cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', (name, age))
    conn.commit()
    conn.close()

# 데이터 조회 함수
def get_users():
    conn = create_connection()
    df = pd.read_sql_query("SELECT * FROM users", conn)
    conn.close()
    return df

# Streamlit 애플리케이션
st.title('Streamlit과 SQLite 데이터베이스 연동 예제')

# 테이블 생성
create_table()

# 사용자 입력
name = st.text_input('이름을 입력하세요')
age = st.number_input('나이를 입력하세요', min_value=1, max_value=100)

# 데이터 삽입
if st.button('저장'):
    insert_user(name, age)
    st.success(f'{name}님이 성공적으로 저장되었습니다.')

# 저장된 데이터 출력
st.subheader('저장된 사용자 목록')
df = get_users()
st.write(df)

코드 설명:

  1. 테이블 생성: 앱 실행 시 create_table() 함수가 호출되어 테이블이 없으면 생성합니다.
  2. 사용자 입력: st.text_input()st.number_input()을 사용하여 사용자가 이름과 나이를 입력할 수 있습니다.
  3. 데이터 삽입: 사용자가 입력한 정보를 insert_user() 함수를 통해 SQLite 데이터베이스에 저장합니다.
  4. 데이터 조회: get_users() 함수를 통해 SQLite 데이터베이스에서 저장된 모든 사용자를 불러오고, Streamlit의 st.write()로 화면에 출력합니다.

6. SQLite 데이터베이스의 활용 확장

SQLite 데이터베이스는 간단한 로컬 데이터 저장소로 매우 유용하지만, 데이터 양이 늘어나면 성능 문제가 발생할 수 있습니다. 더 많은 기능을 필요로 하거나 서버 기반 데이터베이스가 필요할 경우, MySQL, PostgreSQL과 같은 더 강력한 데이터베이스로 전환할 수 있습니다.

SQLite는 간단한 애플리케이션이나 테스트 환경에서 유용하게 사용될 수 있으며, 이와 같은 연습을 통해 데이터베이스의 기초적인 CRUD 작업을 쉽게 구현할 수 있습니다.

7. 결론

이번 글에서는 Streamlit과 SQLite를 연동하여 데이터를 저장하고 조회하는 방법을 살펴보았습니다. SQLite는 파일 기반의 경량 데이터베이스로 간단한 설정으로도 애플리케이션에 데이터 저장 기능을 추가할 수 있으며, Streamlit과의 연동을 통해 인터랙티브한 데이터 처리 기능을 쉽게 구현할 수 있습니다.

위 예제를 활용해 더 복잡한 데이터 구조나 다양한 기능을 추가할 수 있으며, 필요에 따라 더 강력한 데이터베이스 시스템으로 확장할 수도 있습니다.