[python] SQLAlchemy 데이터베이스 모델 정의

gunny·2024년 6월 9일
0

Python

목록 보기
27/29

python SQLAlchemy

  • python 언어를 위한 SQL 툴킷 및 ORM(Obejct-Relational Mapping) 라이브러리
    데이터베이스와의 상호작용을 쉽게 만들어주고, SQL 쿼리를 python 코드로 작성할 수 있게 도와줌
    데이터베이스를 객체 지향적으로 다룰수 있게 해주고 데이터베이스와의 통ㅎ압을 단순화해서 개발자가 코드를 더 쉽게 작성하고 유지보수 할 수 있게 해줌

SQLAlchemy 주요 부분

SQLAlchemy는 크게 세 가지 주요 부분으로 구성됨
1. Core : SQLAlchemy Core는 데이터베이스와의 저수준 상호작용 담당
SQL 표현식 및 SQL 문 생성하고 실행할 수 있는 기능 제공
데이터베이스의 테이블, 열, 인덱스 등과 상호작용 지원

  1. ORM(Object-Relataional Mapping) :
    SQLAlchemy ORM은 데이터베이스의 테이블을 python 클래스로 매핑함
    데이터베이스 레코드를 객체로 다루어 개발자가 객체지향 프로그래밍 스타일로 데이터베이스를 다룰 수 있음
    ORM은 Core 위에 구축되어 있고, 객체와 데이터베이스 레코드 간에 매핑 및 상호작용 담당

  2. SQL Expression Language : SQLAlchemy는 python 코드로 SQL 표현식을 작성할수 있는 독특한 언어 제공

SQLAlchemy를 사용해 데이터베이스 모델 정의

python에서 db 관련 패키지를 정의하는 일반적인 구조 방법으로,
해당 폴더가 Python 패키지임을 인식하고 다른 Python 파일에서 해당 패키지의 모듈을 import 할 수 있도록 한다.

일반적으로 SQLAlchemy를 사용해서 데이터베이스 모델을 정의할 때 해당 프로젝트 구조를 깔끔하게 유지하고 모듈 간의 의존성을 관리하기 위해 이 구조를 사용한다.

project/
│
├── db/
│   ├── __init__.py
│   ├── models.py
│   └── utils.py
├── app.py
└── other_module.py
  • db/ :  데이터베이스 관련 코드 담는 폴더
    - init.py : 해당 폴더를 패키지로 선언. 일반적으로 비워둘 수 있음
    - models.py : SQLAlchemy 모델 클래스를 정의하는 파일. 각 테이블에 대한 모델 클래스 정의
    - utils.py : 데이터베이스와 관련된 유틸리티 함수 정의
  • app.py : 애플리케이션 진입점이 될 수 있는 파일
    데이터베이스와 모델을 사용해서 에플리케이션의 비지니스 로직 구현
  • other_module.py : 다른 모듈에서 데이터베이스 모델이나 유틸리티 함수를 import 해서 사용
  • 'init.py' 파일이 없으면 python은 해당 폴더를 패키지로 인식하지 않고, 모듈 간의 상대적인 import가 제대로 작동하지 않을 수 있음.
    이 파일을 포함함으로써 패키지 구조를 명확히하고 python 인터프리터에게 해당 폴더를 패키지로 처리하도록 알려줌

SQLAlchemy를 사용해 데이터베이스와 상호작용

SQLAlchemy를 사용해 데이터베이스와 상호작용할 때, 세션 은 항상 필요한 요소 중 하나이다. 세션은 데이터베이스와의 연결을 나타내며, 트랜잭션 범위를 나타내고 쿼리 실행 등의 작업을 처리

이를 위해서 일반적인 SQL 데이터베이스와 AyncIO를 지원하는 비동기 데이터베이스를 모두 고려하고 세션을 생성하고 관리하기 위해서 ScopedSession을 사용해서 세션을 사용하고, AsyncScopedSession 비동기 세션을 생성할 수 있다.

그리고 해당 contextmanager 데코레이터를 사용해 컨텍스트 매니저를 정의하고 비동기 컨텍스트 메니저는 asynccontextmanager 데코레이터를 사용해 비동기 컨텍스트 매니저를 정의할 수 있다.
비동기 컨텍스트 매니저는 async with 구문을 사용한다.

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글