Programming/python

SQLAlchemy로 데이터베이스 메타데이터 탐색하기: 스키마와 테이블 정보 활용법

moxie2ks 2026. 1. 21. 18:01
728x90
반응형

개요

SQLAlchemy는 파이썬 기반의 ORM(Object Relational Mapping) 라이브러리로, 데이터베이스와의 상호작용을 객체지향적으로 처리할 수 있게 한다. 그러나 단순히 ORM 기능만 제공하는 것이 아니라, 데이터베이스 메타데이터를 직접 탐색하고 활용할 수 있는 강력한 기능을 포함하고 있다. 이러한 기능을 통해 테이블 목록, 컬럼 정보, 스키마 이름 등을 조회할 수 있으며, 이는 SQLDatabase와 유사한 동작을 직접 구현하는 데 활용될 수 있다.

설명

SQLAlchemy의 inspect 모듈은 데이터베이스 메타데이터를 탐색하기 위한 핵심 도구이다. 이를 통해 특정 스키마의 테이블 목록을 가져오거나, 테이블의 컬럼 정보와 제약조건을 확인할 수 있다. 또한 MetaData 객체를 활용하면 테이블 구조를 로드하여 DDL 수준의 정보를 확인할 수 있으며, 특정 테이블만 대상으로 질의를 제한하는 것도 가능하다. 이러한 기능은 데이터베이스 관리 및 분석 과정에서 유용하게 활용된다.

특징

  • 테이블 목록 조회: get_table_names(schema=...) 메소드로 특정 스키마 내 테이블들을 확인 가능하다.
  • 컬럼 정보 조회: get_columns(table_name, schema=...) 메소드로 컬럼 이름과 데이터 타입을 확인할 수 있다.
  • DDL 확인: MetaDataTable 객체를 통해 테이블 구조를 로드하고, 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로 직접 구현할 수 있으며, 데이터베이스 관리 및 분석에 있어 유연성과 확장성을 확보할 수 있다.

참고문헌

728x90
반응형