Python 고급

Python SQLite와 연동하기

PyExplorer 2025. 1. 6. 08:36
728x90

Python SQLite와 연동하기

SQLite는 경량화된 관계형 데이터베이스 관리 시스템(RDBMS)으로, 소규모 데이터 저장 및 관리에 적합합니다. Python은 SQLite와 기본적으로 호환되며, 내장된 sqlite3 모듈을 통해 데이터베이스를 쉽게 제어할 수 있습니다. 이번 포스팅에서는 Python을 사용해 SQLite 데이터베이스를 생성하고, 데이터를 삽입, 조회, 수정, 삭제하는 방법을 다룹니다.


1. SQLite와 Python 연동의 장점

  • 경량성과 독립성: SQLite는 별도의 서버가 필요 없이 파일 기반으로 작동합니다.
  • Python 표준 라이브러리 포함: 추가 설치 없이 Python만으로 사용 가능합니다.
  • 빠른 프로토타이핑: SQLite는 개발 초기 데이터베이스 구조를 테스트하는 데 유용합니다.

2. SQLite 시작하기

2.1. 데이터베이스 연결

Python에서 SQLite를 사용하려면 sqlite3 모듈을 import하여 데이터베이스 파일에 연결합니다. 데이터베이스 파일이 존재하지 않을 경우, 새 파일이 생성됩니다.

import sqlite3

# 데이터베이스 연결
connection = sqlite3.connect("example.db")
print("데이터베이스에 연결되었습니다.")

# 연결 종료
connection.close()
print("데이터베이스 연결이 종료되었습니다.")

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

데이터를 저장할 테이블을 생성하기 위해 SQL의 CREATE TABLE 문을 사용합니다.

import sqlite3

# 데이터베이스 연결
connection = sqlite3.connect("example.db")
cursor = connection.cursor()

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

print("테이블이 성공적으로 생성되었습니다.")

# 변경 사항 저장 및 연결 종료
connection.commit()
connection.close()

3. 데이터 삽입

INSERT INTO 문을 사용하여 데이터를 삽입합니다. Python에서는 변수와 SQL 문을 결합하기 위해 ? 플레이스홀더를 사용합니다.

import sqlite3

# 데이터베이스 연결
connection = sqlite3.connect("example.db")
cursor = connection.cursor()

# 데이터 삽입
cursor.execute('''
INSERT INTO users (name, age, email) 
VALUES (?, ?, ?)
''', ("Alice", 25, "alice@example.com"))

print("데이터가 성공적으로 삽입되었습니다.")

# 변경 사항 저장 및 연결 종료
connection.commit()
connection.close()

4. 데이터 조회

SELECT 문을 사용하여 데이터를 조회합니다. 데이터를 조회한 후 반복문을 사용해 결과를 출력할 수 있습니다.

import sqlite3

# 데이터베이스 연결
connection = sqlite3.connect("example.db")
cursor = connection.cursor()

# 데이터 조회
cursor.execute('''
SELECT * FROM users
''')

rows = cursor.fetchall()

print("사용자 데이터:")
for row in rows:
    print(row)

# 연결 종료
connection.close()

5. 데이터 수정

UPDATE 문을 사용하여 특정 조건에 맞는 데이터를 수정합니다.

import sqlite3

# 데이터베이스 연결
connection = sqlite3.connect("example.db")
cursor = connection.cursor()

# 데이터 수정
cursor.execute('''
UPDATE users 
SET age = ? 
WHERE name = ?
''', (30, "Alice"))

print("데이터가 성공적으로 수정되었습니다.")

# 변경 사항 저장 및 연결 종료
connection.commit()
connection.close()

6. 데이터 삭제

DELETE 문을 사용하여 특정 조건에 맞는 데이터를 삭제합니다.

import sqlite3

# 데이터베이스 연결
connection = sqlite3.connect("example.db")
cursor = connection.cursor()

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

print("데이터가 성공적으로 삭제되었습니다.")

# 변경 사항 저장 및 연결 종료
connection.commit()
connection.close()

7. 예외 처리

SQLite 작업 중 예외가 발생할 수 있으므로 이를 처리하는 방법도 중요합니다. try-except 구문을 사용해 예외 상황을 관리할 수 있습니다.

import sqlite3

try:
    # 데이터베이스 연결
    connection = sqlite3.connect("example.db")
    cursor = connection.cursor()

    # 예제 SQL 실행
    cursor.execute('''
    INSERT INTO users (name, age, email) 
    VALUES (?, ?, ?)
    ''', ("Bob", 28, "bob@example.com"))

    # 변경 사항 저장
    connection.commit()
    print("데이터 삽입 성공")

except sqlite3.Error as e:
    print("SQLite 오류 발생:", e)

finally:
    # 연결 종료
    if connection:
        connection.close()

8. SQLite 고급 기능

SQLite는 기본적인 데이터 저장뿐 아니라 다음과 같은 고급 기능도 지원합니다:

  • 트랜잭션 관리: 여러 작업을 하나의 트랜잭션으로 묶어 원자성을 보장.
  • 인덱스: 검색 성능 향상을 위해 컬럼에 인덱스를 설정.
  • : 복잡한 쿼리를 간단하게 표현.
# 트랜잭션 예제
try:
    connection = sqlite3.connect("example.db")
    cursor = connection.cursor()

    # 트랜잭션 시작
    cursor.execute("BEGIN TRANSACTION;")
    cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?);", ("Charlie", 35, "charlie@example.com"))
    cursor.execute("UPDATE users SET age = ? WHERE name = ?;", (36, "Charlie"))

    # 트랜잭션 커밋
    connection.commit()
    print("트랜잭션 성공")

except sqlite3.Error as e:
    connection.rollback()
    print("트랜잭션 오류 발생:", e)

finally:
    connection.close()

결론

SQLite는 간단한 설정으로 강력한 기능을 제공하며, Python과의 연동은 매우 쉽습니다. 이번 포스팅에서는 SQLite 데이터베이스 생성부터 데이터 조작, 고급 기능 활용까지 살펴보았습니다. 이를 통해 여러분의 Python 프로젝트에 데이터 저장 및 관리 기능을 손쉽게 통합할 수 있길 바랍니다.

728x90