使用SQLAlchemy在MySQL中存储Python 3 Enum

问题描述 投票:3回答:1

当我尝试使用包含Python Animals对象species的字段Enum存储SpeciesType.Cat对象时,我收到错误

TypeError:'VisitableType'类型的对象没有len()

使用SQLAlchemy在MySQL中存储Python 3 Enum的正确方法是什么?

# SQLALCHEMY CODE ########################

from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class SpeciesType(Enum):
    Cat = 1
    Dog = 2


class Animals(Base):
    __tablename__ = 'animals'
    id  = Column(String(16), primary_key=True)
    species = Column(Enum(SpeciesType))


# REGULAR CODE ########################

import enum

class SpeciesType(enum.Enum):
    Cat = 1
    Dog = 2


class MyClass:
    @property
    def session(self):
        ....

    def insertToDB(self):
        kitty = Animals(id='kitty', species=SpeciesType.Cat)
        self.session.add(kitty)
        self.session.commit()

c = MyClass()
c.insertToDB()

更新

修复sqlalchemy.enumEnum.enum之间的名称冲突后发生以下新错误。

sqlalchemy.exc.StatementError:(builtins.LookupError)“SpeciesType.Cat”不在定义的枚举值中[SQL:'INSERT INTO animals(id,species)VALUES(%(id)s,%(species)s)' ] [参数:[{'species':,'id':'kitty'}]]

python mysql enums sqlalchemy python-3.6
1个回答
2
投票

看起来你正在创建两次Animals枚举,这意味着你将有两个不同的枚举恰好具有相同的名称。

只定义一次,然后将其导入到您需要的任何其他位置。

© www.soinside.com 2019 - 2024. All rights reserved.