SQLite - Python: 초보자 가이드

안녕하세요, 미래의 데이터베이스 마법사 여러분! SQLite와 Python의 세상으로의 흥미로운 여정을 안내해 드리게 되어 기쁩니다. 컴퓨터 과학을 가르치고 있던 저로서는, 이 튜토리얼이 끝나면 여러분이 전문가처럼 데이터베이스를 조작할 수 있을 것이라 확신합니다. 그럼 시작해 보겠습니다!

SQLite - Python

설치

우리의 모험을 시작하기 전에 필요한 도구를 확인해야 합니다. 좋은 소식은, 만약 Python이 설치되어 있다면(저는 그렇다고 가정합니다) SQLite도 이미 설치되어 있다는 것입니다! SQLite는 Python과 함께 제공되므로 추가 설치가 필요하지 않습니다. 이렇게 편리한 것은 아닐까요?

Python sqlite3 모듈 API

이제 우리의 주인공을 소개하겠습니다: sqlite3 모듈. 이 모듈은 Python에서 SQLite 데이터베이스를 작업하는 여러분의 티켓입니다. 이 튜토리얼을 통해 사용할 주요 함수와 메서드를 제공합니다.

다음은 우리가 사용할 주요 메서드의 표입니다:

메서드 설명
connect() 데이터베이스에 연결을 만듭니다
cursor() SQL 명령을 실행하는 커서 객체를 만듭니다
execute() 단일 SQL 명령을 실행합니다
executemany() 모든 파라미터 시퀀스에 대해 SQL 명령을 실행합니다
commit() 현재 트랜잭션을 커밋합니다
rollback() 마지막 commit() 호출 이후에 데이터베이스에 대한 모든 변경 사항을 되돌립니다
close() 데이터베이스 연결을 닫습니다

이제 이 메서드들이 혼란스러울 수 있지만, 우리는 이동하면서 하나씩 자세히 탐구할 것입니다.

데이터베이스 연결

먼저 데이터베이스에 연결해 보겠습니다. 데이터의 집 문을 두드리는 것과 같습니다!

import sqlite3

# 데이터베이스에 연결하거나 (없다면 생성)
conn = sqlite3.connect('my_first_db.db')

print("데이터베이스 연결 성공!")

# 작업이 끝나면 연결을 닫지 마 забудьте
conn.close()

이 예제에서 우리는 sqlite3 모듈을 임포트하고 connect() 함수를 사용하여 'my_first_db.db'라는 데이터베이스에 연결합니다. 만약 이 데이터베이스가 없다면 SQLite가 우리 대신 생성해 줍니다. 정말 친절하네요!

테이블 생성

이제 연결이 완료되었으므로 테이블을 생성해 보겠습니다. 테이블은 데이터베이스 내의 스프레드시트라고 생각해 보세요.

import sqlite3

conn = sqlite3.connect('my_first_db.db')
cursor = conn.cursor()

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

print("테이블 생성 성공!")

conn.commit()
conn.close()

여기서 우리는 'students'라는 테이블을 생성하고 있습니다. 세 개의 열(id, name, age)을 가지고 있습니다. IF NOT EXISTS 조건은 우리가 실수로 같은 테이블을 두 번 생성하려고 할 때 오류를 방지합니다.

데이터 삽입

이제 테이블에 데이터를 추가해 보겠습니다. 스프레드시트에 데이터를 채우는 것과 같습니다!

import sqlite3

conn = sqlite3.connect('my_first_db.db')
cursor = conn.cursor()

# 단일 행 데이터 삽입
cursor.execute("INSERT INTO students (name, age) VALUES (?, ?)", ("Alice", 22))

# 여러 행 데이터 삽입
students_data = [("Bob", 19), ("Charlie", 21), ("David", 20)]
cursor.executemany("INSERT INTO students (name, age) VALUES (?, ?)", students_data)

print("데이터 삽입 성공!")

conn.commit()
conn.close()

이 예제에서 우리는 'students' 테이블에 데이터를 추가하고 있습니다. execute()를 사용하여 단일 삽입을 수행하고, executemany()를 사용하여 여러 삽입을 수행합니다. ? 기호는 우리의 데이터를 위한 占位符로, SQL 인젝션 공격을 방지하는 데 도움이 됩니다. 안전이 최우선입니다!

데이터 선택

이제 데이터를 검색해 보겠습니다. 데이터베이스가 기억하는 것을 보여달라고 요청하는 것과 같습니다!

import sqlite3

conn = sqlite3.connect('my_first_db.db')
cursor = conn.cursor()

# students 테이블의 모든 행 선택
cursor.execute("SELECT * FROM students")

# 모든 행을 가져옵니다
rows = cursor.fetchall()

for row in rows:
print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}")

conn.close()

여기서 우리는 'students' 테이블에서 모든 행을 선택하고 출력하고 있습니다. SQL 쿼리의 *은 "모든 것을 주세요"를 의미합니다. 데이터베이스에 "열쇠를 열다"와 같은 것입니다.

데이터 갱신

때로는 데이터를 변경해야 할 수 있습니다. 학생의 나이를 갱신해 보겠습니다:

import sqlite3

conn = sqlite3.connect('my_first_db.db')
cursor = conn.cursor()

# 학생의 나이 갱신
cursor.execute("UPDATE students SET age = ? WHERE name = ?", (23, "Alice"))

print("데이터 갱신 성공!")

conn.commit()
conn.close()

이 예제에서 우리는 'students' 테이블에서 Alice라는 이름의 학생의 나이를 23으로 갱신하고 있습니다.

Credits: Image by storyset