Python과 SQLite3: 데이터베이스 관리 코드 자세히 보기
SQLite는 가벼운 관계형 데이터베이스 시스템으로, Python에서는 내장 모듈인 sqlite3를 통해 손쉽게 사용할 수 있습니다. 이번 포스팅에서는 SQLite 데이터베이스를 관리하는 세 가지 함수와 그 코드 한 줄 한 줄을 상세히 설명드리겠습니다.
1. 테이블 존재 여부 확인: check_table_exist 함수
import sqlite3
우선, sqlite3 모듈을 임포트합니다. 이를 통해 SQLite 데이터베이스와 상호작용할 수 있습니다.
함수 정의
def check_table_exist(db_name, table_name):
이 함수는 데이터베이스 파일(db_name)과 테이블 이름(table_name)을 인자로 받아, 해당 테이블이 존재하는지 여부를 확인합니다.
데이터베이스 연결
with sqlite3.connect('{}.db'.format(db_name)) as con:
sqlite3.connect() 함수로 SQLite 데이터베이스에 연결합니다. 파일명은 db_name에 .db 확장자를 추가한 문자열로 설정됩니다. with 문을 사용하여, 작업이 완료되면 자동으로 연결이 종료되도록 합니다.
커서 객체 생성
cur = con.cursor()
SQL 쿼리를 실행하기 위해 커서 객체를 생성합니다.
SQL 쿼리 준비
sql = "SELECT name FROM sqlite_master WHERE type='table' and name=:table_name"
SQLite의 메타 데이터베이스인 sqlite_master에서 테이블 목록을 조회하는 SQL 쿼리입니다. sqlite_master는 데이터베이스의 스키마 정보(테이블, 인덱스, 트리거 등)를 저장하는 특수 테이블입니다. 여기서 type='table' 조건을 통해 테이블만 조회하고, name=:table_name 조건으로 특정 테이블의 이름을 확인합니다.
쿼리 실행
cur.execute(sql, {"table_name": table_name})
커서 객체를 통해 SQL 쿼리를 실행합니다. :table_name에 table_name 인자를 매핑하여 쿼리를 실행합니다.
결과 확인 및 반환
if len(cur.fetchall()) > 0:
return True
else:
return False
cur.fetchall()로 쿼리 결과를 가져오고, 결과의 길이가 0보다 크면 해당 테이블이 존재한다는 뜻이므로 True를 반환하고, 그렇지 않으면 False를 반환합니다.
2. 데이터프레임을 데이터베이스에 삽입: insert_df_to_db 함수
def insert_df_to_db(db_name, table_name, df, option="replace"):
이 함수는 데이터프레임(df)을 지정한 데이터베이스의 테이블(table_name)에 삽입합니다. 기본 옵션으로 replace가 설정되어 있어, 테이블이 이미 존재하면 덮어씁니다.
데이터베이스 연결
with sqlite3.connect('{}.db'.format(db_name)) as con:
이전 함수와 동일하게, 데이터베이스에 연결합니다.
데이터프레임 삽입
df.to_sql(table_name, con, if_exists=option)
pandas 데이터프레임의 to_sql() 메서드를 사용하여 데이터프레임을 SQL 테이블로 삽입합니다. 여기서 if_exists 옵션에 따라 테이블이 이미 존재할 경우 어떻게 처리할지 결정됩니다:
- replace: 테이블이 존재하면 삭제하고 새로 생성
- append: 테이블이 존재하면 기존 데이터에 추가
- fail: 테이블이 존재하면 삽입 실패
3. SQL 쿼리 실행: execute_sql 함수
def execute_sql(db_name, sql, param={}):
이 함수는 SQL 쿼리를 실행하는 함수로, 데이터베이스 이름(db_name)과 쿼리(sql), 쿼리 실행 시 필요한 파라미터(param)를 인자로 받습니다.
데이터베이스 연결
with sqlite3.connect('{}.db'.format(db_name)) as con:
다른 함수들과 동일하게, 데이터베이스에 연결합니다.
커서 객체 생성 및 쿼리 실행
cur = con.cursor()
cur.execute(sql, param)
커서 객체를 생성한 후, SQL 쿼리를 실행합니다. 파라미터(param)가 제공되면 이를 쿼리에 바인딩하여 실행합니다.
커서 반환
return cur
쿼리 실행 결과를 포함한 커서 객체를 반환합니다. 이후 커서를 통해 결과를 처리할 수 있습니다.
결론
이 코드는 SQLite 데이터베이스에 데이터를 삽입하고 쿼리를 실행하며, 테이블의 존재 여부를 확인하는 데 유용합니다. 이를 활용하면 간단한 데이터베이스 관리와 분석 시스템을 Python으로 구축할 수 있습니다. 데이터베이스 관련 작업을 자동화하거나 데이터프레임과 SQLite를 손쉽게 연동할 수 있는 좋은 도구가 될 것입니다.