如何在SQLAlchemy中创建枚举?

12
from sqlalchemy import *
from migrate import *

meta = MetaData()
race_enums = ('asian','mideastern','black','nativeamerican','indian','pacific','hispanic','white','other');
profiles_profiles = Table(
    'profiles_profiles', meta,
    Column('id', Integer, primary_key = True),
    Column('user_id', Integer, nullable=False, unique=True),
    Column('race', Enum, race_enums),
    Column('summary', Text, nullable= True),
    Column('my_life', Text, nullable= True),
    Column('to_do', Text, nullable= True),
    Column('favs', Text, nullable= True),
    Column('created_at', DateTime, nullable=True),
    Column('updated_at', DateTime, nullable=True)
)

def upgrade(migrate_engine):
    meta.bind = migrate_engine
    profiles_profiles.create()
    pass

def downgrade(migrate_engine):
    meta.bind = migrate_engine
    profiles_profiles.drop()
    pass

当我运行manage.py upgrade时,出现以下错误:

AttributeError: 'tuple' object has no attribute '_set_parent_with_dispatch'
1个回答

28
你需要将 race_enum 作为 Enum 的参数传递,而不是 Column
你可以将你的 tuple 作为整体传递。
Column('race', Enum('asian','mideastern','black','nativeamerican','indian','pacific','hispanic','white','other'))

或者使用*来解包race_enums

Column('race', Enum(*race_enums))

1
我在类似的情况下设置枚举值时遇到了问题。您如何为 profiles_profiles 表设置 race 的值?它只需要一个字符串吗? - TonyH
@TonyH 我不太确定你所说的“设置值”是什么意思。 - Wondercricket
1
我相信他的意思是插入一条记录。@Wondercricket - courtsimas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接