Flask #8 DB: SQLAlchemy

iwantit·2026년 3월 24일

Flask

목록 보기
8/8

1. SQLAlchemy

1.1 SQL, ORM, SQLAlchemy

구분설명
SQL데이터베이스를 직접 제어하는 언어
ORM데이터베이스를 객체처럼 다루는 기술
SQLAlchemyPython에서 SQL과 ORM을 사용할 수 있게 해주는 라이브러리

1.2 SQL vs ORM 차이

구분SQLORM
접근 방식쿼리 직접 작성객체로 데이터 처리
개발 방식DB 중심객체 중심
가독성낮음 (복잡해질수록)높음
유지보수어려움쉬움
성능높음 (직접 제어)상황에 따라 비효율 발생

1.3 한 줄 정리

  • SQL: 데이터베이스를 직접 다루는 방식
  • ORM: 객체를 통해 간접적으로 다루는 방식
  • SQLAlchemy: Python에서 두 방식을 모두 지원하는 도구

1.4 SQLAlchemy

SQLAlchemy는 Python에서 데이터베이스를 다루기 위한 라이브러리이다.
데이터베이스 연결, SQL 실행, ORM 기능까지 모두 제공한다.

사용 하는 이유

  • 데이터베이스 연결을 쉽게 관리할 수 있다
  • SQL을 직접 쓰거나 ORM을 선택해서 사용할 수 있다
  • Python 코드 기반으로 DB를 다룰 수 있어 유지보수가 편하다

2. DB 설치

pip install flask flask_sqlalchemy pymysql

3. SQLAlchemy 기본 문법

3.1 DB 연결

from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:0000@localhost:3306/flask_db")

3.2 base 생성

from sqlalchemy.orm import declarative_base
Base = declarative_base()

3.3 모델 정의

  • 테이블 = 클래스
Base.metadata.create_all(engine)

실행하면 이렇게 나온다.

  • table.py
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)

3.4 세션 생성

DB 작업을 실제로 실행하는 통로이다.

  • engine: 연결 준비
  • session: 실제 작업 실행
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()

3.5 database crud

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을 해야 실제로 반영이 된다.

profile
클라우드/백엔드 엔지니어 지망생

0개의 댓글