【发布时间】:2018-06-14 16:01:45
【问题描述】:
当我尝试使用包含 Python Enum 对象 SpeciesType.Cat 的字段 species 存储 Animals 对象时,我收到错误
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'}]]]
【问题讨论】:
-
您确定
enum.Enum和sqlalchemy.Enum之间没有名称冲突吗? -
@univerio 修复了名称冲突,现在我得到一个无法解决的新错误
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': <SpeciesType.Cat: 1>, 'id': 'kitty'}]]。更新问题
标签: python mysql enums sqlalchemy python-3.6