import streamlit as st import pandas as pd import sqlite3 import os from datetime import datetime def app(): st.title('Excel to DataBase') st.write('엑셀을 넣어 데이터베이스를 만들어봅시다.') file_name = st.text_input('파일명 지정하기') # 엑셀 파일 업로드 uploaded_file = st.file_uploader('Choose an Excel file', type = ['xlsx','xls','csv']) if uploaded_file is not None: # 엑셀 파일을 데이터프레임으로 변환 try: df = pd.read_csv(uploaded_file) except: df = pd.read_excel(uploaded_file) # 각 열에 대한 데이터 타입 선택 옵션 제공 data_types = {'object': 'String', 'float' : 'Float', 'int' : 'Integer', 'datetime': 'Datetime', 'bool' : 'Bool', } selected_data_types = {} for column in df.columns: data_type = st.selectbox(f"SELECT data type for column '{column}'", options = list(data_types.keys()), format_func = lambda x : data_types[x], key = column) selected_data_types[column] = data_type print(selected_data_types) # 원래 int / float 것들 중에서 object 로 변환해야 할 것들은 object 로 바꾸어주기 if st.button('데이터 변환하고 저장하기'): for column, data_type in selected_data_types.items(): if data_type == 'float': try: df[column] = df[column].str.replace(',','') except: continue df[column] = pd.to_numeric(df[column], errors = 'coerce') elif data_type == 'int': try: df[column] = df[column].str.replace(',','') except: continue df[column] = pd.to_numeric(df[column].str.replace(',',''), errors = 'coerce').fillna(0).astype(int) elif data_type == 'datetime': df[column] = pd.to_datetime(df[column], errors = 'coerce') elif data_type == 'bool': df[column] = df[column].astype(bool) elif data_type == 'object': df[column] = df[column].astype(str).str.replace('.0','') next = True if next: # sql lite 데이터베이스 연결 및 생성 conn = sqlite3.connect(file_name) c = conn.cursor() # 데이터프레임을 SQL테이블로 변환 df.to_sql(f'{file_name}', conn, if_exists = 'replace', index = False) st.success(f'파일은 성공적으로 데이터베이스로 저장되었습니다. 데이터베이스명 [{file_name}]') # 연결 종료 conn conn.close()