Сообщить об ошибке.

Хранение перечислений Python в БД PostgreSQL

В Python перечисления enum - это мощный способ ограничить переменную набором констант и уменьшить количество ошибок, связанных с строками. Если иметь дело с множеством различных типов данных, то часто используется перечисление enum для определения всех возможных форматов, которые может принимать часть данных. Например, описание формата отдельного типа данных может выглядеть так:

class QuantityType(str, Enum):
   CATEGORICAL = 'CATEGORICAL'
   TEXT = 'TEXT'
   NUMERIC = 'NUMERIC'
   DATE = 'DATE'

Часто встает задача: хранить информацию о формате данных этого типа в поле базы данных для каждой строки. Чтобы уменьшить количество ошибок при обмене данными, между кодом Python и базой данных, в PostgreSQL так же можно определить поле таблицы, как такое же перечисление, при помощи функции ENUM(). Чтобы определить в PostgreSQL такое же перечисление, что и в коде Python, необходимо прописать что-то вроде этого:

CREATE TYPE quantity_type as ENUM('CATEGORICAL', 'TEXT', 'NUMERIC', 'DATE');

Или эквивалент в SQLAlchemy:

from sqlalchemy.dialects.postgresql import ENUM
ENUM('CATEGORICAL’, ‘TEXT’, ‘NUMERIC’, ‘DATE’, name=’quantity_type’)

Этот фрагмент кода заимствует определение перечисления SQLAlchemy из Python, помогая в процессе сохранить код "СУХИМ". Кроме того, наличие этого перечисления, определенного в Python, позволяет использовать определение в аннотации типа. В сочетании с проверкой типов, такой как MyPy, это гарантирует, что в базу данных будут вставляться только допустимые значения.