[파이썬] Psycopg2에서 Composite types 및 HStore

Psycopg2는 Python에서 PostgreSQL 데이터베이스를 연결하고 관리하기 위한 라이브러리입니다. 이 라이브러리를 사용하면 Python 프로그램에서 PostgreSQL의 강력한 기능을 활용할 수 있습니다. 이번 글에서는 Psycopg2를 사용하여 Composite types 및 HStore를 다루는 방법에 대해 알아보겠습니다.

Composite types란 무엇인가요?

Composite types는 PostgreSQL에서 사용할 수 있는 사용자 정의 데이터 형식입니다. 이러한 형식은 다른 여러 개의 필드를 가지며, 각각의 필드는 서로 다른 데이터 형식을 가질 수 있습니다. Composite types를 정의하고 사용함으로써 데이터를 구조적으로 저장하고 관리할 수 있습니다.

예를 들어, 다음과 같은 Composite type인 “person”을 정의해 보겠습니다.

CREATE TYPE person AS (
    name varchar,
    age int,
    address varchar
);

Psycopg2를 사용하여 이러한 Composite type을 사용하는 방법은 간단합니다. 먼저, 데이터베이스에 연결한 다음, SQL 쿼리를 사용하여 Composite type을 생성해야 합니다.

import psycopg2

# 데이터베이스에 연결
conn = psycopg2.connect(database="mydb", user="myuser", password="mypassword", host="localhost", port="5432")

# Composite type 생성
cur = conn.cursor()
cur.execute("CREATE TYPE person AS (name varchar, age int, address varchar)")
conn.commit()
cur.close()

이제 Composite type을 사용하여 데이터를 조회하거나 삽입할 수 있습니다.

# 데이터 조회
cur = conn.cursor()
cur.execute("SELECT * FROM employee")
rows = cur.fetchall()
for row in rows:
    print(row)
cur.close()

# 데이터 삽입
cur = conn.cursor()
cur.execute("INSERT INTO employee VALUES ('John Doe', 30, '123 Main St')")
conn.commit()
cur.close()

# 연결 종료
conn.close()

HStore란 무엇인가요?

HStore는 PostgreSQL의 확장 기능 중 하나로, 키-값 쌍을 가지는 비정규화된 데이터 형식입니다. 이러한 형식은 다양한 형태의 데이터를 효율적으로 저장하고 조회할 수 있도록 해줍니다. HStore는 JSON 형식과 비슷하지만, 더 단순하고 빠른 성능을 제공합니다.

HStore 데이터 형식을 사용하기 위해서는 PostgreSQL 서버에 hstore 확장을 설치해야 합니다. 설치 방법은 PostgreSQL 문서를 참고하시기 바랍니다. Psycopg2는 이러한 확장을 사용하여 HStore를 다룰 수 있습니다.

import psycopg2.extras

# 데이터베이스에 연결
conn = psycopg2.connect(database="mydb", user="myuser", password="mypassword", host="localhost", port="5432")

# HStore 데이터 조회
cur = conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor)
cur.execute("SELECT data->'name' AS name, data->'age' AS age FROM employee")
rows = cur.fetchall()
for row in rows:
    print(row)
cur.close()

# HStore 데이터 삽입
cur = conn.cursor()
cur.execute("INSERT INTO employee (data) VALUES ('name=>John Doe, age=>30')")
conn.commit()
cur.close()

# 연결 종료
conn.close()

위의 코드에서는 psycopg2.extras.RealDictCursor를 사용하여 결과를 딕셔너리 형태로 받아옵니다. 이를 통해 키-값 쌍을 더 쉽게 다룰 수 있습니다.

이제 Psycopg2를 사용하여 Composite types와 HStore를 다루는 방법을 알게 되었습니다. 이러한 기능을 활용하면 PostgreSQL 데이터베이스와 Python 프로그램을 효과적으로 연결하고 데이터를 다양한 형식으로 관리할 수 있습니다.