SQLAlchemyモデルでのENUMの書き方

Web開発

皆さん、こんにちは。

おそらくこの記事を読んでる方は、SQLAlchemyを触り始めたばかりの方だと思います。

そんな方向けに今回は、SQLAlchemyでモデルを書くときに、ENUMってどのように書くのかについてです。

SQLAlchemyモデルでENUMの記載方法

さっそくですが。こんな感じで書けます。

import enum
from sqlalchemy import (
    Column,
    Integer,
    String,
    Enum,
)

from db.base_class import Base


class UserType(str, enum.Enum):
    professor = "professor"
    student = "student"
    other = "other"


class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    role = Column(Enum(UserType), nullable=False)
    name = Column(String(100), nullable=False)

ENUMの定義自体は、以下のようにクラスを用意してあげます。

ここでは、モデルのインスタンスから文字列で値を受け取りたいので、

このようにしてます。

class UserType(str, enum.Enum):
    professor = "professor"
    student = "student"
    other = "other"

あとは、対象のカラムに以下のようにセットするだけです。

role = Column(Enum(UserType), nullable=False)

でわでわ。

タイトルとURLをコピーしました