当我尝试使用包含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.enum
和Enum.enum
之间的名称冲突后发生以下新错误。
sqlalchemy.exc.StatementError:(builtins.LookupError)“SpeciesType.Cat”不在定义的枚举值中[SQL:'INSERT INTO animals(id,species)VALUES(%(id)s,%(species)s)' ] [参数:[{'species':,'id':'kitty'}]]
看起来你正在创建两次Animals
枚举,这意味着你将有两个不同的枚举恰好具有相同的名称。
只定义一次,然后将其导入到您需要的任何其他位置。