본문 바로가기

Study Information Technology

Python의 sqlite3 모듈로 경량 데이터베이스 관리하기

728x90
반응형

Python의 sqlite3 모듈로 경량 데이터베이스 관리하기

Overview

Python의 sqlite3 모듈은 경량 데이터베이스 시스템인 SQLite를 활용하여 데이터의 영속성을 지원합니다. SQLite는 파일 기반의 데이터베이스로, 서버를 별도로 운영하지 않고도 데이터베이스를 사용할 수 있는 장점이 있습니다. 이 모듈을 통해 데이터베이스를 만들고, 테이블을 정의하며, 데이터를 삽입하고 쿼리하는 작업을 간편하게 할 수 있습니다. 이 글에서는 sqlite3 모듈을 활용한 기본적인 데이터베이스 작업을 자세히 설명하겠습니다.

1. sqlite3 모듈 설치

sqlite3 모듈은 Python 표준 라이브러리의 일부로, 별도의 설치 없이 Python을 설치하면 자동으로 포함됩니다. 그러나 SQLite의 최신 버전을 사용하고 싶다면 SQLite 공식 웹사이트에서 다운로드하여 설치할 수 있습니다.

2. 데이터베이스 연결 및 생성

데이터베이스를 생성하고 연결하는 방법은 다음과 같습니다:

import sqlite3

# 데이터베이스 연결 (파일이 없으면 새로 생성됨)
conn = sqlite3.connect('example.db')

# 커서 객체 생성
cursor = conn.cursor()

위 코드에서 'example.db'는 데이터베이스 파일의 이름입니다. 이 파일이 존재하지 않으면 자동으로 생성됩니다. 연결이 성공하면 conn 객체를 통해 데이터베이스와 상호작용할 수 있습니다.

3. 테이블 생성

테이블을 생성하는 SQL 쿼리를 작성하고 실행합니다. 예를 들어, 사용자 정보를 저장할 테이블을 생성하는 코드는 다음과 같습니다:

# 테이블 생성 SQL 쿼리
create_table_query = '''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL
)
'''

# 쿼리 실행
cursor.execute(create_table_query)

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

이 쿼리는 users라는 이름의 테이블을 생성하며, id, name, age라는 필드를 포함합니다. id 필드는 자동으로 증가하는 정수형 기본 키로 설정됩니다.

4. 데이터 삽입

테이블에 데이터를 삽입하는 방법은 다음과 같습니다:

# 데이터 삽입 SQL 쿼리
insert_query = 'INSERT INTO users (name, age) VALUES (?, ?)'

# 데이터 삽입
cursor.execute(insert_query, ('Alice', 30))
cursor.execute(insert_query, ('Bob', 25))

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

VALUES (?, ?) 구문은 SQL 인젝션 공격을 방지하고, 입력 데이터를 안전하게 처리합니다. execute 메서드의 두 번째 인자는 튜플 형태로 데이터를 전달합니다.

5. 데이터 조회

데이터를 조회하는 쿼리는 다음과 같습니다:

# 데이터 조회 SQL 쿼리
select_query = 'SELECT * FROM users'

# 쿼리 실행 및 결과 가져오기
cursor.execute(select_query)
rows = cursor.fetchall()

# 결과 출력
for row in rows:
print(row)

fetchall() 메서드는 쿼리 결과를 리스트 형태로 반환합니다. 각 항목은 튜플 형태로, 테이블의 각 레코드에 해당합니다.

6. 데이터 업데이트

기존 데이터를 업데이트할 때는 다음과 같은 SQL 쿼리를 사용합니다:

# 데이터 업데이트 SQL 쿼리
update_query = 'UPDATE users SET age = ? WHERE name = ?'

# 데이터 업데이트
cursor.execute(update_query, (31, 'Alice'))

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

위 코드에서는 Alice라는 이름을 가진 사용자의 나이를 31로 업데이트합니다.

7. 데이터 삭제

데이터를 삭제하려면 다음과 같은 SQL 쿼리를 사용합니다:

# 데이터 삭제 SQL 쿼리
delete_query = 'DELETE FROM users WHERE name = ?'

# 데이터 삭제
cursor.execute(delete_query, ('Bob',))

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

이 쿼리는 name 필드가 'Bob'인 레코드를 삭제합니다.

8. 에러 처리

데이터베이스 작업 중 에러가 발생할 수 있으며, 이를 처리하기 위해 try-except 구문을 사용할 수 있습니다:

try:
# 데이터베이스 작업 수행
cursor.execute(insert_query, ('Charlie', 40))
conn.commit()
except sqlite3.Error as e:
print(f"SQLite error: {e}")
finally:
conn.close()

이 코드는 데이터베이스 작업 도중 발생할 수 있는 에러를 처리하고, 작업이 끝난 후에는 데이터베이스 연결을 종료합니다.

9. 데이터베이스 연결 종료

작업이 완료되면 데이터베이스 연결을 종료합니다:

# 데이터베이스 연결 종료
conn.close()

연결을 종료하지 않으면 데이터베이스 파일이 잠길 수 있으며, 이후 다른 프로그램에서 접근할 때 문제가 발생할 수 있습니다.

참고문서

이 문서들은 sqlite3 모듈과 SQLite 데이터베이스에 대한 자세한 설명과 추가적인 정보를 제공합니다.

728x90
반응형