[파이썬] Psycopg2에서 사용자 정의 데이터 타입 어댑터

Psycopg2는 Python에서 PostgreSQL 데이터베이스에 접속하고 관련 작업을 수행하기 위한 인기있는 라이브러리입니다. Psycopg2는 풍부한 기능을 제공하며, 사용자 정의 데이터 타입에 대한 어댑터를 만들어 PostgreSQL 확장을 손쉽게 사용할 수 있습니다.

사용자 정의 데이터 타입

PostgreSQL은 기본적으로 다양한 데이터 타입을 지원하며, 사용자는 필요에 따라 자신만의 사용자 정의 데이터 타입을 만들 수 있습니다. 사용자 정의 데이터 타입은 PostgreSQL 확장의 일부로 만들어지며, Python에서 해당 데이터 타입을 다루는 방법을 알려주어야 합니다.

Psycopg2 어댑터 만들기

Psycopg2에서 사용자 정의 데이터 타입을 다루기 위해서는 해당 데이터 타입에 대한 어댑터 클래스를 만들어야 합니다. 이 어댑터 클래스는 psycopg2.extensions 모듈의 adapter 클래스를 상속받아 구현됩니다.

from psycopg2 import extensions

class CustomDataTypeAdapter(extensions.adapter):

    def from_custom_data_type(self, custom_data_type):
        # 사용자 정의 타입을 Python 객체로 변환하는 로직
        pass

    def getquoted(self):
        # Python 객체를 SQL 문장에 사용될 수 있는 문자열로 변환하는 로직
        pass

extensions.register_type(CustomDataTypeAdapter, AnyCustomDataType)

from_custom_data_type 메서드는 PostgreSQL에서 가져온 사용자 정의 데이터 타입 값을 Python 객체로 변환하는 로직을 구현합니다. getquoted 메서드는 Python 객체를 SQL 문장에 사용될 수 있는 문자열로 변환하는 로직을 구현합니다.

어댑터 등록

어댑터 클래스를 작성한 후, 해당 클래스를 Psycopg2에 등록해야 합니다. extensions 모듈에 있는 register_type 메서드를 사용하여 등록할 수 있습니다.

extensions.register_type(CustomDataTypeAdapter, AnyCustomDataType)

CustomDataTypeAdapter는 위에서 작성한 어댑터 클래스이며, AnyCustomDataType는 사용자 정의 데이터 타입의 이름입니다.

사용자 정의 데이터 타입 활용

이제 Psycopg2에서 사용자 정의 데이터 타입을 활용할 수 있습니다. PostgreSQL 데이터베이스에 사용자 정의 데이터 타입을 가지는 테이블을 생성하고, Python 코드에서 해당 값을 다루는 예제를 살펴보겠습니다.

import psycopg2

conn = psycopg2.connect(database="mydb", user="myuser", password="mypassword", host="127.0.0.1", port="5432")
cur = conn.cursor()

# 사용자 정의 데이터 타입을 가지는 테이블 생성
cur.execute("""
    CREATE TABLE mytable (
        id SERIAL PRIMARY KEY,
        custom_data_column ANYCUSTOMDATATYPE
    )
""")

# 사용자 정의 데이터 타입 값을 삽입
cur.execute("""
    INSERT INTO mytable (custom_data_column) VALUES (%s)
""", (custom_data_value,))

# 사용자 정의 데이터 타입 값을 조회
cur.execute("""
    SELECT custom_data_column FROM mytable
""")
result = cur.fetchone()[0]

# 어댑터를 사용하여 Python 객체로 변환
python_object = result.from_custom_data_type()

위의 예제에서 custom_data_value는 Python에서 사용자 정의 데이터 타입의 값으로 변환된 객체입니다. result.from_custom_data_type() 메서드는 CustomDataTypeAdapter 클래스에서 구현한 from_custom_data_type 메서드를 호출하여 PostgreSQL 데이터를 Python 객체로 변환합니다.

이와 같이 Psycopg2에서 사용자 정의 데이터 타입 어댑터를 사용하여 PostgreSQL 확장을 편리하게 다룰 수 있습니다. 어댑터를 작성하고 등록하여 Python 코드에서 PostgreSQL 데이터베이스의 사용자 정의 데이터 타입을 손쉽게 처리할 수 있습니다.