SQLite는 가벼운 디스크 기반 데이터베이스로, 서버가 필요 없는 내장형 데이터베이스 시스템입니다. 파이썬(Python)은 sqlite3 모듈을 통해 SQLite 데이터베이스를 쉽게 다룰 수 있으며, 소규모 애플리케이션이나 테스트용 데이터베이스를 구축하는 데 매우 유용합니다. 이번 포스팅에서는 파이썬과 SQLite를 사용하여 데이터베이스를 생성하고, 데이터를 처리하는 방법에 대해 알아보겠습니다.

1. SQLite와 파이썬 sqlite3 모듈

SQLite는 관계형 데이터베이스 관리 시스템(RDBMS)의 일종으로, 파일 기반으로 동작합니다. 서버가 필요하지 않으며, 하나의 파일로 데이터베이스가 저장되므로 간단한 애플리케이션에 적합합니다.

파이썬의 sqlite3 모듈은 SQLite 데이터베이스와 상호 작용할 수 있는 표준 라이브러리로, 별도의 설치 없이 사용할 수 있습니다.

1.1. sqlite3 모듈 임포트

SQLite 데이터베이스를 사용하기 위해 sqlite3 모듈을 임포트합니다.

import sqlite3

2. SQLite 데이터베이스 연결

SQLite 데이터베이스에 연결하려면 sqlite3.connect() 함수를 사용합니다. 이 함수는 데이터베이스 파일의 경로를 인수로 받아 데이터베이스에 연결하거나, 해당 파일이 없을 경우 새로 생성합니다.

2.1. 데이터베이스 연결 및 커서 생성

# 데이터베이스 연결
conn = sqlite3.connect('example.db')

# 커서 생성
cur = conn.cursor()

위 코드에서는 example.db라는 이름의 데이터베이스 파일에 연결하고, SQL 문을 실행하기 위해 커서를 생성합니다.

3. 데이터베이스 테이블 생성

데이터베이스에 테이블을 생성하기 위해 SQL의 CREATE TABLE 문을 사용합니다. 커서를 통해 SQL 문을 실행하고, 테이블을 생성합니다.

3.1. 테이블 생성 예제

# 테이블 생성
cur.execute('''CREATE TABLE IF NOT EXISTS users
               (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')

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

위 코드에서는 users라는 테이블을 생성합니다. 이 테이블은 id, name, age라는 세 개의 열을 가지며, id는 기본 키로 설정되어 있습니다.

4. 데이터 삽입

테이블에 데이터를 삽입하기 위해 INSERT INTO 문을 사용합니다. 커서를 통해 SQL 문을 실행하여 데이터를 삽입할 수 있습니다.

4.1. 데이터 삽입 예제

# 데이터 삽입
cur.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 25))
cur.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Bob', 30))

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

위 코드에서는 users 테이블에 두 개의 행을 삽입합니다. ?는 SQL 문에서 자리표시자로 사용되며, 두 번째 인수로 전달된 튜플이 ? 자리에 대입됩니다.

4.2. 여러 행 삽입

여러 개의 데이터를 한 번에 삽입하려면 executemany() 메서드를 사용할 수 있습니다.

# 여러 행 삽입
user_data = [('Charlie', 35), ('David', 40), ('Eve', 22)]
cur.executemany("INSERT INTO users (name, age) VALUES (?, ?)", user_data)

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

5. 데이터 조회

데이터베이스에서 데이터를 조회하기 위해 SELECT 문을 사용합니다. 조회된 데이터는 커서의 fetchone(), fetchall() 메서드를 통해 가져올 수 있습니다.

5.1. 데이터 조회 예제

# 데이터 조회
cur.execute("SELECT * FROM users")

# 모든 데이터 가져오기
rows = cur.fetchall()

# 데이터 출력
for row in rows:
    print(row)

위 코드에서는 users 테이블의 모든 데이터를 조회하여 출력합니다. fetchall() 메서드는 조회된 모든 행을 리스트 형태로 반환합니다.

5.2. 조건에 따른 데이터 조회

조건을 추가하여 특정 데이터를 조회할 수 있습니다.

# 조건에 따른 데이터 조회
cur.execute("SELECT * FROM users WHERE age > ?", (30,))

# 조회된 데이터 가져오기
rows = cur.fetchall()

# 데이터 출력
for row in rows:
    print(row)

위 코드에서는 age가 30보다 큰 사용자만 조회합니다.

6. 데이터 업데이트와 삭제

테이블의 데이터를 업데이트하거나 삭제할 때는 각각 UPDATE 문과 DELETE 문을 사용합니다.

6.1. 데이터 업데이트 예제

# 데이터 업데이트
cur.execute("UPDATE users SET age = ? WHERE name = ?", (26, 'Alice'))

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

위 코드에서는 Alice의 나이를 26으로 업데이트합니다.

6.2. 데이터 삭제 예제

# 데이터 삭제
cur.execute("DELETE FROM users WHERE name = ?", ('Bob',))

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

위 코드에서는 Bob이라는 이름의 사용자를 users 테이블에서 삭제합니다.

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

모든 작업이 완료된 후에는 데이터베이스 연결을 종료해야 합니다. 이를 위해 close() 메서드를 사용합니다.

# 연결 종료
conn.close()

8. SQLite 트랜잭션 관리

SQLite는 트랜잭션을 통해 데이터베이스의 일관성을 유지합니다. 파이썬의 sqlite3 모듈은 자동으로 트랜잭션을 관리하지만, 수동으로 트랜잭션을 제어할 수도 있습니다.

8.1. 트랜잭션 시작, 커밋, 롤백

try:
    # 트랜잭션 시작
    conn.execute('BEGIN TRANSACTION')

    # 여러 SQL 문 실행
    cur.execute("UPDATE users SET age = age + 1")
    cur.execute("DELETE FROM users WHERE name = 'Eve'")

    # 트랜잭션 커밋
    conn.commit()
except Exception as e:
    # 오류 발생 시 롤백
    conn.rollback()
    print("Transaction failed:", e)

위 코드에서는 트랜잭션을 수동으로 시작하고, 여러 SQL 문을 실행한 후 커밋하거나 오류 발생 시 롤백합니다.

9. SQLite 데이터베이스 백업

SQLite 데이터베이스는 파일 기반이므로 파일을 복사하여 쉽게 백업할 수 있습니다. 또한, sqlite3 모듈은 backup() 메서드를 제공하여 데이터베이스를 백업할 수 있습니다.

9.1. 데이터베이스 백업 예제

# 원본 데이터베이스 연결
conn = sqlite3.connect('example.db')

# 백업 데이터베이스 연결
backup_conn = sqlite3.connect('backup.db')

# 백업 수행
with backup_conn:
    conn.backup(backup_conn)

# 연결 종료
backup_conn.close()
conn.close()

위 코드에서는 example.db 데이터베이스를 backup.db로 백업합니다.

결론

이번 포스팅에서는 파이썬의 sqlite3 모듈을 사용하여 SQLite 데이터베이스를 처리하는 방법에 대해 알아보았습니다. SQLite는 서버 없이 파일 기반으로 동작하는 가벼운 데이터베이스로, 소규모 애플리케이션에 적합합니다. 데이터베이스 연결부터 테이블 생성, 데이터 삽입 및 조회, 업데이트, 삭제, 트랜잭션 관리, 그리고 백업까지의 기본적인 데이터베이스 작업을 실습해 보면서 SQLite의 편리함을 경험해 보세요.


이 글을 통해 파이썬과 SQLite를 활용하여 데이터베이스를 처리하는 방법을 이해하고, 실습을 통해 이를 사용하는 방법을 익힐 수 있을 것입니다. SQLite를 사용해 더 효율적이고 가벼운 데이터베이스 기반의 파이썬 애플리케이션을 개발해 보세요!

+ Recent posts