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 구문을 사용한다.
But one misstep, and a hidden spike turns your victory into slapstick defeat wacky flip.