익명 사용자
로그인하지 않음
토론
기여
계정 만들기
로그인
IT 위키
검색
SQLAlchemy
편집하기
IT 위키
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
편집
원본 편집
역사
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
SQLAlchemy는 파이썬에서 관계형 데이터베이스와 상호작용하기 위한 SQL 툴킷이자 객체 관계 매핑(ORM) 라이브러리이다. == 개요 == SQLAlchemy는 파이썬 개발자에게 SQL의 모든 기능과 데이터베이스 지속성 패턴을 파이썬스러운 방식으로 사용할 수 있게 해 주며, 성능과 유연성을 모두 고려한 설계가 특징이다.<ref>SQLAlchemy 공식 문서</ref><ref>“Overview — SQLAlchemy 2.0 Documentation”</ref> SQLAlchemy는 크게 두 부분으로 구성된다. * '''Core (SQL 표현 언어 및 DBAPI 추상화 계층)''' * '''ORM (객체 관계 매핑 계층)''' == 주요 구성 요소 == === 엔진(Engine) 및 연결 관리 === SQLAlchemy의 엔진은 데이터베이스와의 연결을 관리하며, 커넥션 풀을 포함한다.<ref>“SQLAlchemy ORM Tutorial”</ref> 엔진은 즉시 데이터베이스에 연결하지 않고, 쿼리 실행 시점에 연결을 확보한다. === 메타데이터와 스키마 정의 === SQLAlchemy에서는 MetaData 객체를 사용하여 테이블, 열, 관계 등에 대한 스키마 정의를 표현할 수 있다. 이미 존재하는 데이터베이스의 스키마를 반영(reflect)하여 파이썬 객체로 가져오는 기능도 제공한다. === SQL 표현 언어 (Expression Language) === Core 계층에서는 SQL 표현 언어를 활용하여 SQL 구문을 파이썬 코드로 구성하고 실행할 수 있다. 예: select(), insert(), update(), delete() 등의 함수형 API 제공 === 객체 관계 매핑 (ORM) === ORM 계층에서는 파이썬 클래스를 데이터베이스 테이블에 매핑하고, 인스턴스의 변경 사항을 데이터베이스에 반영할 수 있다. SQLAlchemy ORM은 데이터 매퍼(Data Mapper) 패턴을 채택하여, 도메인 모델과 데이터베이스 구조를 느슨하게 결합한다.<ref>“Features — SQLAlchemy”</ref> === 세션(Session) 및 단위 작업(Unit of Work) === ORM에서는 Session 객체를 통해 객체를 추가, 수정, 삭제하고 트랜잭션 단위로 커밋 또는 롤백할 수 있다. 세션은 변경된 객체를 추적하고, 일괄적으로 SQL 구문을 생성하는 단위 작업(Unit of Work) 패턴을 따른다. === 관계 설정 및 로딩 전략 === 일대다, 다대일, 다대다 관계를 지원하며, '''지연 로딩(lazy loading)'''과 '''즉시 로딩(eager loading)''' 등의 전략을 설정할 수 있다. 관계형 데이터를 효율적으로 조회하기 위한 다양한 로딩 옵션을 제공한다. == 특징 및 장점 == * 다양한 데이터베이스 지원: SQLite, PostgreSQL, MySQL, Oracle, MS SQL 등<ref>“Features — SQLAlchemy”</ref> * 동기(synchronous) 및 비동기(asynchronous) 드라이버 지원<ref>“Features — SQLAlchemy”</ref> * 사용자 정의 타입과 변환 처리 지원 * SQL 표현 및 ORM 기능의 유연한 혼용 가능 * 스키마 반영(reflection), 마이그레이션 도구(Alembic 등)와의 연계 * 데이터베이스 독립성 확보: 특정 DBMS에 종속되지 않는 코드 작성 가능 == 사용 예시 == 다음은 SQLAlchemy ORM을 사용한 간단한 예시이다. <syntaxhighlight lang="python"> from sqlalchemy import create_engine, Column, Integer, String, ForeignKey from sqlalchemy.orm import declarative_base, relationship, sessionmaker Base = declarative_base() class Director(Base): __tablename__ = 'directors' id = Column(Integer, primary_key=True) name = Column(String, nullable=False, unique=True) movies = relationship("Movie", back_populates="director") class Movie(Base): __tablename__ = 'movies' id = Column(Integer, primary_key=True) title = Column(String, nullable=False) year = Column(Integer) director_id = Column(Integer, ForeignKey('directors.id')) director = relationship("Director", back_populates="movies") engine = create_engine('sqlite:///:memory:', echo=True) Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) session = Session() d = Director(name="Christopher Nolan") m = Movie(title="Inception", year=2010, director=d) session.add_all([d, m]) session.commit() for movie in session.query(Movie).all(): print(movie.title, movie.director.name) </syntaxhighlight> == 한계 및 주의점 == * 러닝 커브가 다소 높다. 초심자가 모든 개념을 이해하기 어렵다. * ORM 계층의 추상화로 인해 복잡한 쿼리나 성능 최적화가 필요한 경우 Core 또는 순수 SQL을 병행해야 할 때가 있다. * 부적절한 매핑이나 관계 설정은 N+1 쿼리 문제 등 비효율적 동작을 초래할 수 있다. == 역사 및 버전 == SQLAlchemy는 2006년 2월에 마이클 베이어(Michael Bayer)에 의해 처음 공개되었다.<ref>“SQLAlchemy (Wikipedia)”</ref> 1.x 시리즈를 거쳐 2.0 버전에서는 API 일관성과 비동기 기능 지원이 강화되었다.<ref>“Overview — SQLAlchemy 2.0 Documentation”</ref> == 같이 보기 == * [[ORM 프레임워크]] * [[데이터베이스]] == 참고 문헌 == * Rick Copeland, ''Essential SQLAlchemy'', O’Reilly Media, 2008 * Mark Ramm & Michael Bayer, ''SQLAlchemy: Database Access Using Python'', Addison-Wesley, 2010 == 각주 == <references /> [[분류:파이썬]] [[분류:프로그래밍]]
요약:
IT 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
IT 위키:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)
둘러보기
둘러보기
대문
최근 바뀜
광고
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록