DictCursor: 파이썬에서 딕셔너리형 DB 결과 받아보기

Sue·2025년 6월 4일
0
post-thumbnail

DictCursor는 데이터베이스에서 쿼리를 실행한 후 결과를 딕셔너리 형태로 반환해주는 특별한 커서(cursor)입니다.

일반적으로 파이썬에서 데이터베이스(특히 PostgreSQL의 psycopg2나 MySQL의 pymysql 같은 라이브러리)와 상호작용할 때, cursor.execute()를 통해 SQL 쿼리를 실행하고 cursor.fetchone()이나 cursor.fetchall() 등을 사용하여 결과를 가져옵니다.

일반적인 커서의 반환 값:

기본(default) 커서를 사용하면 쿼리 결과의 각 행(row)이 튜플(tuple) 형태로 반환됩니다. 예를 들어, SELECT id, name, email FROM users;라는 쿼리를 실행하고 fetchone()하면 (1, 'John Doe', 'john@example.com')과 같은 튜플을 얻게 됩니다.

이 경우, 특정 컬럼의 값을 얻으려면 인덱스를 사용해야 합니다.

user_data = cursor.fetchone()
user_id = user_data[0]
user_name = user_data[1]

이렇게 하면 컬럼 순서가 바뀌거나 컬럼이 추가/삭제될 때마다 코드도 수정해야 하는 불편함이 있습니다. 또한, 컬럼 이름이 무엇인지 명확하게 드러나지 않아 가독성이 떨어집니다.

DictCursor의 반환 값:

DictCursor를 사용하면 쿼리 결과의 각 행이 딕셔너리(dictionary) 형태로 반환됩니다. 이때 딕셔너리의 키(key)는 컬럼 이름이 되고, 값(value)은 해당 컬럼의 데이터가 됩니다.

예를 들어, 위와 동일한 쿼리를 DictCursor로 실행하고 fetchone()하면 {'id': 1, 'name': 'John Doe', 'email': 'john@example.com'}과 같은 딕셔너리를 얻게 됩니다.

이제 컬럼 이름을 사용하여 값을 쉽게 얻을 수 있습니다.

user_data = cursor.fetchone() # {'id': 1, 'name': 'John Doe', 'email': 'john@example.com'}
user_id = user_data['id']
user_name = user_data['name']

이렇게 하면 코드가 훨씬 읽기 쉬워지고, 데이터베이스 스키마(컬럼 순서) 변경에 좀 더 유연하게 대처할 수 있다는 장점이 있습니다.

주요 사용처:

  • 가독성 향상: 코드에서 데이터의 의미를 바로 파악하기 좋습니다.
  • 유지보수 용이: 컬럼 순서 변경에 강하여 데이터베이스 스키마 변경 시 코드 수정이 줄어듭니다.
  • API 응답: 데이터를 JSON 형태로 클라이언트에 반환할 때 딕셔너리 형태가 바로 매핑되어 편리합니다.

어떻게 사용하나?

파이썬의 데이터베이스 라이브러리(예: psycopg2 for PostgreSQL)에서 커서를 생성할 때 cursor_factory 옵션에 DictCursor를 지정해줍니다.

import psycopg2
from psycopg2.extras import DictCursor # psycopg2의 경우 extras 모듈에 포함

conn = psycopg2.connect(database="your_db", user="your_user", password="your_password", host="your_host")

# DictCursor를 사용하여 커서 생성
cursor = conn.cursor(cursor_factory=DictCursor)

cursor.execute("SELECT id, name FROM my_table WHERE id = %s;", (1,))
result = cursor.fetchone() # result는 {'id': 1, 'name': 'example'} 형태의 딕셔너리

print(result['name']) # 'example' 출력

cursor.close()
conn.close()

일부 라이브러리에서는 RealDictCursor와 같이 완벽하게 딕셔너리처럼 동작하면서 인덱스 접근은 지원하지 않는 더 엄격한 딕셔너리 커서도 제공하니, 사용하는 라이브러리의 문서를 참고하는 것이 좋습니다.

결론적으로, DictCursor는 데이터베이스 쿼리 결과를 다루기 편리하게 딕셔너리 형태로 제공하여 개발 효율성과 코드 가독성을 높여주는 유용한 도구입니다.

profile
AI/ML Engineer

0개의 댓글