定义 SQLAlchemy 枚举列长度

Defining SQLAlchemy enum column lenght

我想知道是否可以使用 SQLAlchemy 定义枚举类型字段的长度。在我的例子中,类 定义如下:

EnumTest.py

from enum import Enum


class EnumTest(str, Enum):
    EnumTest1 = "EnumTest1"
    EnumTest2 = "EnumTest2"
    EnumTest3 = "EnumTest3"

TestTable.py

from models import Base
from sqlalchemy import Column, Enum, String

from .EnumTest import EnumTest


class TestTable(Base):

    __tablename__ = "test"

    id = Column(String(50), primary_key=True)
    my_enum = Column(Enum(EnumTest), nullable=False)

我的目标是创建一个名为 my_enum 的字段,类型为 character varying,长度为 50 与 id 字段的情况相同。

Docs

The Enum type will make use of the backend’s native “ENUM” type if one is available; otherwise, it uses a VARCHAR datatype

...

length – allows specifying a custom length for the VARCHAR when Enum.native_enum is False. By default it uses the length of the longest value.

因此,您可以设置 native_enum=Falselength=50。它可能看起来像这样

my_enum = Column(Enum(EnumTest, native_enum=False, length=50), nullable=False)