728x90
반응형
개요
SQLAlchemy는 파이썬 기반의 ORM(Object Relational Mapping) 라이브러리로, 데이터베이스와의 상호작용을 객체지향적으로 처리할 수 있게 한다. 그러나 단순히 ORM 기능만 제공하는 것이 아니라, 데이터베이스 메타데이터를 직접 탐색하고 활용할 수 있는 강력한 기능을 포함하고 있다. 이러한 기능을 통해 테이블 목록, 컬럼 정보, 스키마 이름 등을 조회할 수 있으며, 이는 SQLDatabase와 유사한 동작을 직접 구현하는 데 활용될 수 있다.
설명
SQLAlchemy의 inspect 모듈은 데이터베이스 메타데이터를 탐색하기 위한 핵심 도구이다. 이를 통해 특정 스키마의 테이블 목록을 가져오거나, 테이블의 컬럼 정보와 제약조건을 확인할 수 있다. 또한 MetaData 객체를 활용하면 테이블 구조를 로드하여 DDL 수준의 정보를 확인할 수 있으며, 특정 테이블만 대상으로 질의를 제한하는 것도 가능하다. 이러한 기능은 데이터베이스 관리 및 분석 과정에서 유용하게 활용된다.
특징
- 테이블 목록 조회:
get_table_names(schema=...)메소드로 특정 스키마 내 테이블들을 확인 가능하다. - 컬럼 정보 조회:
get_columns(table_name, schema=...)메소드로 컬럼 이름과 데이터 타입을 확인할 수 있다. - DDL 확인:
MetaData와Table객체를 통해 테이블 구조를 로드하고,CreateTable구문으로 SQL을 생성할 수 있다. - 질의 제한: 특정 테이블 객체만 지정하여
select()구문을 작성함으로써 원하는 테이블만 대상으로 질의할 수 있다. - 스키마 이름 조회:
get_schema_names()메소드로 데이터베이스 내 존재하는 모든 스키마 이름을 가져올 수 있다.
예제
from sqlalchemy import create_engine, inspect, MetaData, Table, select
# DB 연결 엔진 생성
engine = create_engine("postgresql://user:password@localhost:5432/mydb")
inspector = inspect(engine)
# 1. 모든 스키마 이름 가져오기
schemas = inspector.get_schema_names()
print(schemas)
# 2. 특정 스키마의 테이블 목록 가져오기
tables = inspector.get_table_names(schema="public")
print(tables)
# 3. 특정 테이블의 컬럼 정보 가져오기
columns = inspector.get_columns("users", schema="public")
for col in columns:
print(col["name"], col["type"])
# 4. 테이블 구조 확인하기
metadata = MetaData()
users = Table("users", metadata, autoload_with=engine, schema="public")
print(users.columns.keys())
print(users.primary_key)
# 5. 특정 테이블만 대상으로 질의하기
stmt = select(users).where(users.c.id == 1)
result = engine.execute(stmt).fetchall()
print(result)
결론
SQLAlchemy는 단순한 ORM을 넘어 데이터베이스 메타데이터를 탐색하고 활용할 수 있는 강력한 기능을 제공한다. 이를 통해 테이블 목록, 컬럼 정보, 스키마 이름 등을 손쉽게 조회할 수 있으며, 특정 테이블만 대상으로 질의를 제한하는 것도 가능하다. 따라서 SQLDatabase에서 제공하는 기능 대부분을 SQLAlchemy로 직접 구현할 수 있으며, 데이터베이스 관리 및 분석에 있어 유연성과 확장성을 확보할 수 있다.
참고문헌
- SQLAlchemy 공식 문서:
https://docs.sqlalchemy.org/en/20/core/inspection.html(docs.sqlalchemy.org in Bing) - PostgreSQL 공식 문서:
https://www.postgresql.org/docs/current/catalogs.html(postgresql.org in Bing)
728x90
반응형
'Programming > python' 카테고리의 다른 글
| Python asyncio.as_completed를 활용한 Markdown 문서 병렬 청킹 (1) | 2026.03.13 |
|---|---|
| python raise, yield, return의 차이 (0) | 2026.02.20 |
| Oracle DB와 SQLAlchemy: 세미콜론 문제와 ORA-00933 에러 (0) | 2025.12.04 |
| Python JSON 문자열 파싱 가이드 (0) | 2025.10.14 |
| FastAPI에서 ThreadPoolExecutor를 활용한 동기 코드의 비동기 실행 (0) | 2025.10.13 |