728x90
반응형
Engine
- SQLAlchemy application에서 데이터를 연결하기 위한 객체
- 특정 데이터베이스에 대한 연결의 중앙소스로 작동
- 데이터베이스 연결을 위한 factory 역할과 connectection pool 제공
- 일반적으로 특정 데이터베이스에 서버에 대해서 한 번만 전역 객체로 생성
- create_engine() 함수로 생성
- PostgreSQL, MySQL, SQLite, Oracle, Microsoft SQL Server 등 여러 데이터베이스를 지원함
# SQLite 연결 예시
from sqlalchemy import create_engine
engine = create_engine("sqlite+pysqlite:///:memory:", echo=True)
- dialect+driver://username:password@host:port/database 형식
- username:password@host:port가 생략될 수도 있음
- 생략 시 dialect+driver:///database와 같은 형태
- SQLite와 같은 파일 기반 데이터베이스는 로컬 파일 시스템에 파일을 생성하여 사용하기에 네트워크를 통해 접근할 필요가 없어서 username, password, host, port가 필요하지 않음
- 메모리 내에서만 존재하는 임시 데이터베이스의 경우에도 네트워크 정보가 필요하지 않음
- dialect+driver: 사용할 데이터베이스와 DBAPI 드라이버를 지정
- username: 데이터베이스에 접속하기 위한 사용자명과 비밀번호
- host: 데이터베이스 서버의 호스트 이름 또는 IP 주소
- port: 데이터베이스 서버가 사용하는 포트 번호
- database: 연결할 데이터베이스의 이름 또는 경로
- username:password@host:port가 생략될 수도 있음
- sqlite+pysqlite:///:memory:
- sqlite(dialect): SQLite 데이터베이스와 통신하겠다
- +: SQLAlchemy URL에서 dialect와 DBAPI Driver 구분하는 역할 (DBAPI Driver 생략시 사용 x)
- pysqlite(DBAPI Driver): SQLAlchemy가 데이터베이스와 상호작용하기 위해서 사용하는 Python 인터페이스 (생략 가능)
- pysqlite는 Python의 SQLite 데이터베이스를 위한 표준 라이브러리인 sqlite3 모듈을 의미
- SQLAlchemy는 pysqlite를 통해 SQLite 데이터베이스와 통신
- 생략 시, SQLAlchemy는 사용할 데이터베이스에 대한 기본 DBAPI 사용
- 첫 번째 슬래시 (//): 표준 URL 형식에 맞추기 위해 사용
- 경로 구분 슬래시(/): 데이터베이스 파일의 위치를 나타냄. /memory:은 메모리 전용 데이터베이스를 사용하고 있음을 나타냄
- Lazy Connecting
- SQLAlchemy에서 create_engine() 함수를 호출하여 엔진 객체를 생성할 때, 실제로는 데이터베이스와 즉시 연결되지 않음
- 데이터베이스와의 연결은 엔진 객체가 처음으로 실제 데이터베이스 작업(ex 쿼리 실행)을 수행할 때 이루어짐
DBAPI
- Python 프로그램이 다양한 데이터베이스와 상호 작용할 수 있도록 도와주는 표준 인터페이스
- Python 코드가 데이터베이스와 소통할 수 있게 해주는 번역기 역할
- 여기서는 SQLAlchemy가 여러 데이터베이스와 상호작용할 수 있도록 지원하는 다리 역할
- 주요 기능
- 연결 (Connection): 데이터베이스 서버에 연결을 설정
- 커서 (Cursor): 데이터베이스에서 SQL 쿼리를 실행하고, 결과를 가져오는 데 사용
- 트랜잭션 관리 (Transaction Management): 여러 SQL 명령을 하나의 단위로 묶어서 실행하고, 필요에 따라 롤백 가능
- 에러 처리 (Error Handling): 데이터베이스 작업 중 발생하는 오류를 처리
728x90
반응형
'Programming Language > Python' 카테고리의 다른 글
[SQLAlchemy] 3. MetaData (0) | 2024.06.22 |
---|---|
[SQLAlchemy] 2. Connection, Commit, Query, Bound parameters (0) | 2024.06.22 |
[FastAPI] 12. Update: PUT, PATCH (0) | 2024.06.20 |
[FastAPI] 11. JSON 호환 인코더: jsonable_encoder (0) | 2024.06.20 |
[FastAPI] 10. Form Data & Request File (0) | 2024.06.20 |