В 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
, это гарантирует, что в базу данных будут вставляться только допустимые значения.