| 구분 | 설명 |
|---|---|
| SQL | 데이터베이스를 직접 제어하는 언어 |
| ORM | 데이터베이스를 객체처럼 다루는 기술 |
| SQLAlchemy | Python에서 SQL과 ORM을 사용할 수 있게 해주는 라이브러리 |
| 구분 | SQL | ORM |
|---|---|---|
| 접근 방식 | 쿼리 직접 작성 | 객체로 데이터 처리 |
| 개발 방식 | DB 중심 | 객체 중심 |
| 가독성 | 낮음 (복잡해질수록) | 높음 |
| 유지보수 | 어려움 | 쉬움 |
| 성능 | 높음 (직접 제어) | 상황에 따라 비효율 발생 |
SQLAlchemy는 Python에서 데이터베이스를 다루기 위한 라이브러리이다.
데이터베이스 연결, SQL 실행, ORM 기능까지 모두 제공한다.
pip install flask flask_sqlalchemy pymysql
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:0000@localhost:3306/flask_db")
from sqlalchemy.orm import declarative_base
Base = declarative_base()
Base.metadata.create_all(engine)
실행하면 이렇게 나온다.

from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import declarative_base
Base = declarative_base()
engine = create_engine("mysql+pymysql://root:0000@localhost:3306/flask_db")
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True)
name = Column(String(50))
age = Column(Integer)
Base.metadata.create_all(engine)
DB 작업을 실제로 실행하는 통로이다.
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker
engine = create_engine("mysql+pymysql://root:0000@localhost:3306/flask_db")
Base = declarative_base()
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True)
name = Column(String(50))
age = Column(Integer)
# 테이블 생성
Base.metadata.create_all(engine)
# 세션 생성
Session = sessionmaker(bind=engine)
session = Session()
# Create
user = User(name="짱구", age=20)
session.add(user)
session.commit()
# Read
users = session.query(User).all()
for u in users:
print(u.name)
# 조건 조회
user = session.query(User).filter(User.name == "짱구").first()
# Update
if user:
user.name="수정된 이름"
session.commit()
# Delete
if user:
session.delete(user)
session.commit()
# 세션 종료
session.close()
commit을 해야 실제로 반영이 된다.