DB
[Python] SQLite3 DB 적재 2회차
렁다이쿤
2023. 6. 8. 13:58
728x90
지난 1회차에서 DB에 깡통 테이블을 만들었었죠!
이번에는 깡통 테이블에 데이터를 적재하는 방법에 대해 알아보겠습니다!
# 사용자 정의 객체
file_path = r"C:/Users/sdjeo/OneDrive/바탕 화면/"
# DB테이블 생성 : 1. 고객정보
# 1-1. CSV 추출 및 변환
# 데이터 추출
customer_data = pd.read_csv(f"{file_path}/CUSTOMER.csv")
# 컬럼명 Rename
df = (
customer_data
.rename(columns = {
"CUST_ID" : '고객번호'
, "LAST_NAME" : '성'
, "FIRST_NAME" : '이름'
, "GENDER" : '성별'
, "AGE" : '나이'
}
)
)
먼저, csv파일로 저장된 데이터를 로드한 후 변수명을 변경해줍니다.
고객번호 성 이름 나이 성별
1161115 | Re**** | Laurel | 30 | Male |
1168350 | Su**** | Otto | 27 | Male |
1161269 | Kl******** | Ta-Heng | 44 | Male |
1161657 | Ro**** | Bhadrabuja | 65 | Male |
1161937 | Ly***** | Candrin | 49 | Male |
... | ... | ... | ... | ... |
1254229 | Od** | Reba | 71 | Female |
1254576 | P¿******** | Leonore | 47 | Male |
1037053 | Ho**** | Federico | 45 | Male |
1037261 | Pe********* | Najia | 51 | Female |
1037854 | Ca**** | Hugh | 66 | Male |
4749 rows × 5 columns
이 후, 데이터 초기화 및 적재를 수행합니다.
고객번호를 기준으로 중복 제거를 한 후, 데이터를 CUSTOMER_INFO 테이블에 밀어넣습니다.
con : 데이터베이스 연결 객체(engine)를 지정
if_exists: 테이블이 이미 존재할 경우의 동작을 설정 / 'append' : 기존 테이블에 데이터를 추가합니다.
index: 인덱스 컬럼을 테이블에 적재하지 않도록 설정
method: 데이터를 적재하는 방법을 설정 / 'multi'로 설정하면 데이터를 일괄적으로 적재
chunksize: 한 번에 적재되는 데이터의 크기(chunk)를 설정 / 10000으로 설정되어 있으므로 10000개의 행 단위로 데이터를 적재
즉, 아래 코드는 'CUSTOMER_INFO' 테이블에서 모든 데이터를 삭제한 후, 데이터프레임(df)에서 중복된 '고객번호'를 제거한 데이터를 'CUSTOMER_INFO' 테이블에 추가로 적재합니다.
# 1-2. DB적재
# 데이터 초기화
cur.execute("""delete from CUSTOMER_INFO""")
# 데이터 적재
df.drop_duplicates(['고객번호']).to_sql(
name = f'CUSTOMER_INFO'
, con = engine
, if_exists = 'append'
, index = False
, method = "multi"
, chunksize = 10000
)
[LOG] DF 건수 = 4,749, DB DF 건수 = 4,749
최종적으로, 데이터건수와 적재된 데이터 건수를 비교합니다