728x90
이 글에서 다루는 개념
Python에서는 SQL을 활용하여 데이터베이스를 다룰 수 있으며,
이를 위해 내장 모듈인 sqlite3와 강력한 ORM 라이브러리인 SQLAlchemy를 사용할 수 있습니다.
이번 글에서는 다음 내용을 학습합니다.
- SQLite 데이터베이스 사용법 (sqlite3 모듈)
- 기본 SQL 명령어 (SELECT, INSERT, UPDATE, DELETE)
- SQLAlchemy를 활용한 ORM(Object-Relational Mapping)
- 데이터베이스 연결과 테이블 생성, CRUD 연산
1️⃣ SQLite 데이터베이스란?
SQLite는 가벼운 파일 기반 데이터베이스로, 별도의 서버 설치 없이 사용 가능합니다.
Python에서는 sqlite3 모듈을 사용하여 SQLite 데이터베이스를 쉽게 다룰 수 있습니다.
📌 SQLite의 특징
- Python에 기본 포함 (pip install 불필요)
- 단일 파일(.db)로 저장됨
- 빠르고 가벼운 관계형 데이터베이스
2️⃣ sqlite3를 사용한 기본 데이터베이스 작업
🔹 데이터베이스 연결 및 테이블 생성
import sqlite3
# 데이터베이스 연결 (없으면 자동 생성)
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
# 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL
)
""")
conn.commit() # 변경사항 저장
conn.close() # 연결 종료
📌 코드 설명
- connect("example.db") → 데이터베이스 연결 (파일이 없으면 생성)
- cursor.execute(SQL문) → SQL 실행
- commit() → 변경사항 저장
- close() → 연결 종료
🔹 데이터 삽입 (INSERT)
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 25))
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Bob", 30))
conn.commit()
conn.close()
📌 ?를 사용한 데이터 삽입 (SQL Injection 방지)
- "INSERT INTO users (name, age) VALUES (?, ?)"
- ("Alice", 25) 값을 바인딩하여 실행
🔹 데이터 조회 (SELECT)
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall() # 모든 데이터 가져오기
for row in rows:
print(row)
conn.close()
📌 출력 예시
(1, 'Alice', 25)
(2, 'Bob', 30)
🔹 데이터 수정 (UPDATE)
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
cursor.execute("UPDATE users SET age = ? WHERE name = ?", (28, "Alice"))
conn.commit()
conn.close()
🔹 데이터 삭제 (DELETE)
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
cursor.execute("DELETE FROM users WHERE name = ?", ("Bob",))
conn.commit()
conn.close()
📌 데이터 삭제 후 다시 조회하면 "Bob" 데이터가 사라짐
3️⃣ SQLAlchemy를 활용한 ORM (Object-Relational Mapping)
SQLAlchemy는 데이터베이스를 객체처럼 다룰 수 있도록 하는 ORM 라이브러리입니다.
(⚠ sqlite3는 직접 SQL을 사용하지만, SQLAlchemy는 객체 기반으로 조작 가능)
📌 설치 방법
pip install sqlalchemy
🔹 SQLAlchemy로 데이터베이스 연결 및 테이블 생성
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker
# SQLite 데이터베이스 연결
engine = create_engine("sqlite:///example.db", echo=True)
Base = declarative_base()
# 사용자 테이블 정의
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String, nullable=False)
age = Column(Integer, nullable=False)
# 테이블 생성
Base.metadata.create_all(engine)
📌 코드 설명
- create_engine("sqlite:///example.db") → SQLite 데이터베이스 연결
- declarative_base() → ORM 모델의 기반 클래스 생성
- Column(Integer, primary_key=True) → 기본 키 설정
- metadata.create_all(engine) → 데이터베이스에 테이블 생성
🔹 SQLAlchemy로 데이터 삽입
Session = sessionmaker(bind=engine)
session = Session()
new_user = User(name="Alice", age=25)
session.add(new_user) # 데이터 추가
session.commit() # 변경사항 저장
🔹 SQLAlchemy로 데이터 조회
users = session.query(User).all()
for user in users:
print(user.id, user.name, user.age)
📌 출력 예시
1 Alice 25
🔹 SQLAlchemy로 데이터 수정
user = session.query(User).filter_by(name="Alice").first()
user.age = 28
session.commit()
🔹 SQLAlchemy로 데이터 삭제
user = session.query(User).filter_by(name="Alice").first()
session.delete(user)
session.commit()
📌 데이터 삭제 후 다시 조회하면 "Alice" 데이터가 사라짐
📌 실전 문제: SQL과 데이터베이스 연습하기
✅ 문제 1: SQLite를 사용하여 테이블 생성하기
📌 products 테이블을 생성하고, id, name, price 컬럼을 추가하세요.
import sqlite3
# 🔽 여기에 코드 작성
import sqlite3
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL NOT NULL
)
""")
conn.commit()
conn.close()
✅ 문제 2: SQLite를 사용하여 데이터 삽입 후 조회하기
📌 products 테이블에 데이터("Laptop", 1200.0), ("Phone", 800.0)를 삽입하고 조회하세요.
# 🔽 여기에 코드 작성
conn = sqlite3.connect("example.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO products (name, price) VALUES (?, ?)", ("Laptop", 1200.0))
cursor.execute("INSERT INTO products (name, price) VALUES (?, ?)", ("Phone", 800.0))
conn.commit()
cursor.execute("SELECT * FROM products")
rows = cursor.fetchall()
for row in rows:
print(row)
conn.close()
✅ 문제 3: SQLAlchemy를 사용하여 데이터 삽입 후 조회하기
📌 SQLAlchemy ORM을 사용하여 Product 모델을 만들고, 데이터를 삽입한 후 조회하세요.
# 🔽 여기에 코드 작성
from sqlalchemy import create_engine, Column, Integer, String, Float
from sqlalchemy.orm import declarative_base, sessionmaker
engine = create_engine("sqlite:///example.db")
Base = declarative_base()
class Product(Base):
__tablename__ = "products"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String, nullable=False)
price = Column(Float, nullable=False)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
session.add(Product(name="Laptop", price=1200.0))
session.add(Product(name="Phone", price=800.0))
session.commit()
products = session.query(Product).all()
for product in products:
print(product.id, product.name, product.price)
728x90
'Data Engineering > python' 카테고리의 다른 글
EP17 | 고급 Python 활용 #6 | Pandas를 활용한 고급 데이터 분석 (0) | 2025.03.19 |
---|---|
EP16 | 고급 Python 활용 #5 | 데이터 처리와 Pandas 기본 사용법 (0) | 2025.03.19 |
EP14 | 고급 Python 활용 #3 | 비동기 프로그래밍 (AsyncIO) (0) | 2025.03.19 |
EP13 | 고급 Python 활용 #2 | 멀티스레딩과 멀티프로세싱 (0) | 2025.03.19 |
EP12 | 고급 Python 활용 #1 | 함수형 프로그래밍 (Map, Filter, Reduce, List Comprehension) (0) | 2025.03.19 |