当我试图储存 Animals
带字段的对象 species
包含python Enum
对象 SpeciesType.Cat
,我得到错误
typeerror:类型为“visitabletype”的对象没有len()
存储python3的正确方法是什么 Enum
在mysql中使用sqlalchemy?
# 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:'插入动物(id,物种)值(%(id)s,%(物种)s)')][参数:[{'species':,'id':'kitty'}]]
2条答案
按热度按时间0ejtzxu11#
你的
enum
模型应该是python的子类enum.Enum
您的模型列定义应该使用sqlalchemy.Enum
```class SpeciesType(enum.Enum):
...
class Animals(Base):
...
species = Column(sqlalchemy.Enum(SpeciesType))
xpszyzbs2#
看起来您正在创建
Animals
枚举两次,这意味着您将有两个恰好具有相同名称的不同枚举。只定义一次,然后将其导入任何需要的地方。