개요
Python에서 PyMySQL을 사용해 데이터를 조회하다 보면 다음과 같이 Decimal이라는 객체로 값을 반환받는 경우가 있다.
이런 데이터를 Python float이나 double로 취급하고 싶다. 방법을 적어둔다.
Decimal
데이터베이스에서 Decimal은 고정 소수점 타입으로, 실수의 값을 정확하게 표현하기 위해 사용한다. 고정 소수점 방식은 소수부의 자릿수를 고정하여 표현한다.
DECIMAL(M,D)
M은 소수부와 정수부를 포함한 전체 자리수를자릿수를 의미하고, D가 소수부의 자릿수를 나타낸다.
converters.conversions
PyMySQL은 conversion dictionary라는 개념으로 데이터베이스의 데이터 타입을 Python의 데이터 타입으로 변환하는 규칙을 사용하고 있다. connection 생성 시 conversion dictionary를 정의하여 전달하여 사용자가 원하는 데이터 타입의 값을 반환받을 수 있다.
방법은 다음과 같다.
- conversion dictionary 복사.
얕은 복사를 수행하는 것이 좋겠다.
conversions = pymysql.converters.conversions.copy()
- 데이터 타입 변환 규칙 정의
conversions[pymysql.FIELD_TYPE.NEWDECIMAL] = float
- connection 생성 시 conversion dictionary 전달
connection = pymysql.connect(
host=MYSQL_HOST,
port=int(MYSQL_PORT),
user=MYSQL_USER,
password=MYSQL_PASS,
db=MYSQL_DB,
conv=conversions
)
이제 Decimal 데이터를 반환받아보자.
원하던 대로 python float 형 데이터로 받아온 것을 확인할 수 있다.
참고 문서
https://snyk.io/advisor/python/PyMySQL/functions/pymysql.converters.conversions.copy
https://pymysql.readthedocs.io/en/latest/modules/connections.html