Ditto Wiki

SQLAlchemy

SQLAlchemy는 파이썬용 데이터베이스 추상화 라이브러리다. 크게 코어 (SQL 표현식 API)와 ORM으로 나눌 수 있으며 ORM은 코어에 의존하는 형태로 되어있다. 그 중에서도 특히 ORM이 엄청난 기능을 자랑하는데, 자바의 Hibernate와 맞먹는 수준이라 할 수 있다. 아마 다른 (동적) 언어를 뒤져봐도 이 정도 수준으로 구현된 ORM은 없을 것이다.

SQL 표현식 API는 쿼리를 programmatic하게 생성하게 해주는 역할을 한다. SQL을 직접 작성하는 대신 공통 API를 사용하여 쿼리를 생성하기 때문에, DB 엔진에 관계 없이 거의 동일한 기능을 구현할 수 있도록 되어 있다. 일부 기능이 부족한 데이터베이스 엔진 (예를 들어 SQLite)를 위해서 기능을 에뮬레이션 해주기도 하고, 원한다면 특정 엔진의 기능을 사용하는 것도 가능하다.

ORM은 Object-Relational Mapper의 약자로, 객체를 관계형 DB의 테이블에 매핑해주는 역할이다. 다른 흔한 ORM과 달리 진짜(?) ORM이라고 할 수 있는 것이, 객체를 매핑하기 위해서 특정 클래스를 상속받지 않아도 된다. 매핑 설정을 따로 한다.1) 그래서 데이터 저장이나 불러오기와 관련된 메서드가 객체에 섞여들어가지 않고, 별도의 Session 객체를 통해서 이를 처리한다. (문서에 따르면, '투명하게')

Session 객체는 DB에서 가져온 객체들을 관리하는 일도 한다. 같은 primary key를 가진 DB 레코드와 연결된 객체가 단 하나가 되도록 (즉, 모두 동일한 identity를 가지도록) 해준다. 객체를 단순히 데이터를 운반하기 위한 용도로 사용하는 것이 아닌 진정한 object-relational mapping을 지원하는 것이다. 따라서 어느 한 곳에서 속성을 변경하면, 그 객체를 참조하고 있는 모든 곳에서 값이 똑같이 바뀐다.

지원하는 기능이 워낙 방대하다보니(문서가 워낙 verbose하게 써있기도 하고…) 쉽게 접근하기 힘든 면이 있지만, 이러한 설계 철학을 이해하고 나면 조금 수월해지는 것 같다.

1) 그렇지만 일반적인 경우, Declarative 확장 모듈을 써서 클래스에 바로 매핑 정보를 선언하게 된다.
맨위로
sqlalchemy.txt · 마지막 수정: 2012/01/07 14:58 작성자 ditto