SQLAlchemy Enums in Python

Published on
Authors

Summary

SQLAlchemy is a popular Python library for working with relational databases. One of the features that make it a powerful tool for database development is its support for enumerations. In this blog post, we'll explore SQLAlchemy enums and how they can be used in your database schema.

Defining SQLAlchemy Enums

To define a SQLAlchemy enum, you can use the Enum class, which is part of the SQLAlchemy sqlalchemy.types module. The Enum class takes two arguments: the first is the name of the enum, and the second is a callable that returns a list of the possible values for the enum.

Here's an example of how to define a ApartmentType enum using the Enum class:

from sqlalchemy.types import Enum
from enum import Enum as PyEnum

class ApartmentEnum(PyEnum):
    STUDIO = 'Studio'
    ONE_BEDROOM = '1 Bedroom'
    TWO_BEDROOM = '2 Bedrooms'
    THREE_BEDROOM = '3 Bedrooms'


ApartmentType = Enum(
    ApartmentEnum,
    name="apartment_type",
    values_callable=lambda obj: [item.value for item in obj],
)

In this example, we define a ApartmentType enum that is based on the ApartmentEnum enumeration. The name argument sets the name of the enum in the database, while the values_callable argument is a lambda function that returns a list of possible values for the enum.

Using SQLAlchemy Enums in Your Database Schema

Once you've defined your enum, you can use it in your database schema definition. For example, here's how you might define an Apartment table that includes a type column based on the ApartmentType enum:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Apartment(Base):
    __tablename__ = 'apartments'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    type = Column(ApartmentType)

In this example, we define an Apartment table that includes columns for id, name, and type. The type column is based on the ApartmentType enum, which means that it can only store values that are defined in the enum.

Conclusion

SQLAlchemy enums provide a powerful tool for working with enumerated values in your database schema. By defining an enum using the Enum class and using it in your table definitions, you can enforce strict constraints on the values that can be stored in your database. This can help ensure data integrity and make your code more maintainable over time.