본문 바로가기

Python/공부공부

[Python] SQLAlchemy 라이브러리

 

SQLAlchemy 

Python에서 데이터베이스를 다루기 위한 ORM(Object Relational Mapping) 라이브러리.

  • ORM 기능 : SQL문 작성 없이 Python 클래스/객체와 데이터베이스 테이블/레코드 매핑 가능.
  • SQL 표현식 언어 : SQL을 Python 코드로 표현 가능.
  • 다양한 DB 지원 (MySQL, PostgreSQL, SQLite, Oracle 등)

 


 

1. Create_engine

Engine 객체를 통해 DB와 연결. ( PostgreSQL )

from sqlalchemy import create_engine

engine = create_engine("postgresql+psycopg2://user:password@localhost:5432/mydb")

 

2. MetaData, Table (Core 방식)

기존 DB 테이블을 리플렉션(Reflection)해서 가져오는 방식.

from sqlalchemy import MetaData, Table

metadata = MetaData()
# 기존 user 테이블 가져오기

user_table = Table("user", metadata, autoload_with=engine)

# INSERT 실행
with engine.begin() as conn:
    stmt = insert(user_table).values(id=1, name="Alice")
    conn.execute(stmt)

=> 쿼리 빌더 함수를 이용해서 SQL문을 실행. ( JPA의 JPQL/NativeQuery 와 비슷 )

 

3. ORM 방식 (Session 활용)

Base 클래스를 상속받아 정의하면 자동으로 테이블과 매핑.

Session을 통해 트랜잭션 단위로 객체 관리. (commit, rollback 가능)

from sqlalchemy.orm import declarative_base, sessionmaker
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class User(Base):
    __tablename__ = "user"
    id = Column(Integer, primary_key=True)
    name = Column(String)

# 세션 준비
SessionLocal = sessionmaker(bind=engine)
session = SessionLocal()

# 데이터 추가
new_user = User(name="Alice")
session.add(new_user)
session.commit()

=> 세션에 객체를 추가하여 커밋. ( JPA의 EntityManager + 엔티티와 비슷 )