SQLAlchemy는 크게 세 가지 주요 부분으로 구성됨
1. Core : SQLAlchemy Core는 데이터베이스와의 저수준 상호작용 담당
SQL 표현식 및 SQL 문 생성하고 실행할 수 있는 기능 제공
데이터베이스의 테이블, 열, 인덱스 등과 상호작용 지원
ORM(Object-Relataional Mapping) :
SQLAlchemy ORM은 데이터베이스의 테이블을 python 클래스로 매핑함
데이터베이스 레코드를 객체로 다루어 개발자가 객체지향 프로그래밍 스타일로 데이터베이스를 다룰 수 있음
ORM은 Core 위에 구축되어 있고, 객체와 데이터베이스 레코드 간에 매핑 및 상호작용 담당
SQL Expression Language : SQLAlchemy는 python 코드로 SQL 표현식을 작성할수 있는 독특한 언어 제공
python에서 db 관련 패키지를 정의하는 일반적인 구조 방법으로,
해당 폴더가 Python 패키지임을 인식하고 다른 Python 파일에서 해당 패키지의 모듈을 import 할 수 있도록 한다.
일반적으로 SQLAlchemy를 사용해서 데이터베이스 모델을 정의할 때 해당 프로젝트 구조를 깔끔하게 유지하고 모듈 간의 의존성을 관리하기 위해 이 구조를 사용한다.
project/
│
├── db/
│ ├── __init__.py
│ ├── models.py
│ └── utils.py
├── app.py
└── other_module.py
SQLAlchemy를 사용해 데이터베이스와 상호작용할 때, 세션
은 항상 필요한 요소 중 하나이다. 세션은 데이터베이스와의 연결을 나타내며, 트랜잭션 범위를 나타내고 쿼리 실행 등의 작업을 처리함
이를 위해서 일반적인 SQL 데이터베이스와 AyncIO를 지원하는 비동기 데이터베이스를 모두 고려하고 세션을 생성하고 관리하기 위해서 ScopedSession
을 사용해서 세션을 사용하고, AsyncScopedSession
비동기 세션을 생성할 수 있다.
그리고 해당 contextmanager
데코레이터를 사용해 컨텍스트 매니저를 정의하고 비동기 컨텍스트 메니저는 asynccontextmanager
데코레이터를 사용해 비동기 컨텍스트 매니저를 정의할 수 있다.
비동기 컨텍스트 매니저는 async with
구문을 사용한다.