[파이썬] Psycopg2에서 JSON 및 JSONB 데이터 타입 처리

Python은 데이터베이스와의 상호작용을 위한 여러 라이브러리를 제공하며, 그 중 하나인 Psycopg2는 PostgreSQL 데이터베이스에 접근하기 위한 인터페이스를 제공합니다. Psycopg2를 사용하여 JSON 및 JSONB 데이터 타입을 처리하는 방법에 대해 알아보겠습니다. JSON 및 JSONB 데이터 타입은 PostgreSQL에서 구조화되지 않은 데이터를 저장하기 위한 유용한 형식입니다.

JSON 데이터 삽입 및 검색

JSON 데이터를 삽입하려면 Psycopg2 라이브러리의 json 모듈을 사용하면 됩니다. 이를 위해 json.dumps() 함수를 사용하여 Python 객체를 JSON 문자열로 변환한 후, Psycopg2의 execute() 메서드를 사용하여 데이터를 삽입합니다.

import psycopg2
import json

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

# JSON 데이터 삽입
data = {"name": "John", "age": 30, "city": "New York"}
json_data = json.dumps(data)
cur.execute("INSERT INTO mytable (json_column) VALUES (%s)", (json_data,))

# JSON 데이터 검색
cur.execute("SELECT json_column FROM mytable")
row = cur.fetchone()
json_result = row[0]

# JSON 데이터 파싱
parsed_data = json.loads(json_result)
print(parsed_data["name"])  # 출력: John

# 연결 종료
cur.close()
conn.close()

위의 예시에서는 Python의 json 모듈을 사용하여 JSON 데이터를 삽입하고 검색하는 방법을 보여줍니다. json.dumps() 함수로 Python 객체를 JSON 문자열로 변환하고, 이를 Psycopg2의 execute() 메서드에 전달하여 데이터를 삽입합니다. 검색된 JSON 데이터는 파싱을 통해 원하는 필드에 접근할 수 있습니다.

JSONB 데이터 삽입 및 쿼리

PostgreSQL에서는 JSONB 데이터 타입을 사용하여 복잡한 JSON 객체를 저장할 수 있습니다. 이는 검색과 쿼리 과정에서 좀 더 효율적인 작업을 가능케 합니다.

import psycopg2
import json

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

# JSONB 데이터 삽입
data = {"name": "John", "age": 30, "city": "New York"}
json_data = json.dumps(data)
cur.execute("INSERT INTO mytable (jsonb_column) VALUES (%s)", (json_data,))

# JSONB 데이터 쿼리
cur.execute("SELECT jsonb_column->>'name' FROM mytable")
row = cur.fetchone()
print(row[0])  # 출력: John

# 연결 종료
cur.close()
conn.close()

위의 예시에서는 jsonb_column->>'name'을 사용하여 JSONB 데이터 필드에 직접 접근할 수 있습니다. 이를 통해 SQL 쿼리에서 JSONB 데이터의 특정 필드를 선택할 수 있습니다.

결론

이렇게 Psycopg2를 사용하여 PostgreSQL의 JSON 및 JSONB 데이터 타입을 처리할 수 있습니다. JSON 데이터를 삽입, 검색, 파싱하고, JSONB 데이터를 삽입하고 쿼리하는 방법을 알아보았습니다. 이러한 기능을 활용하여 PostgreSQL 데이터베이스와 Python 애플리케이션 간의 유연하고 효율적인 데이터 교환을 할 수 있습니다.