使用SQLAlchemy在MySQL中存储python3enum

2024-09-27 23:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图用一个包含Python Enum对象SpeciesType.Cat的字段Animals来存储Animals对象时,我得到了错误

TypeError: object of type 'VisitableType' has no len()

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

# 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" is not among the defined enum values [SQL: 'INSERT INTO animals (id, species) VALUES (%(id)s, %(species)s)'] [parameters: [{'species': , 'id': 'kitty'}]]


Tags: 对象importselfidsqlalchemysessionenumclass

热门问题