我编写了以下代码来获取sqlalchemy中的所有列名称和类型。但是,在ENUM类型的情况下,我得到的是Varchar。
我想知道一种方法,我可以为所有枚举列获取枚举类型以及枚举的所有可能值。
EntityClass = eval(entity_name)
entity_dict = {}
entity_dict['attributes'] = []
for column in EntityClass.__table__.columns:
entity_dict['attributes'].append({
'key': str(column.key),
'type': str(column.type).split('(')[0].split('[')[0]
})
print entity_dict
我使用以下方法在sqlalchemy中创建一个新的枚举:
class CourseType(enum.Enum):
Certified = "Certified"
Non_Certified = "Non_Certified"
@staticmethod
def list():
return list(map(lambda c: c.value, CourseType))
这就是我在表格中使用枚举的方式:
type = Column(Enum(CourseType))
有什么建议吗?
答案 0 :(得分:0)
好的,我得到了解决方案。这就是我解决问题的方法:
EntityClass = eval(entity_name)
entity_dict = {}
entity_dict['attributes'] = []
for column in EntityClass.__table__.columns:
if hasattr(column.type, 'enums'):
column_type = 'ENUM'
possible_values = column.type.enums
else:
column_type = str(column.type).split('(')[0].split('[')[0]
possible_values = 'NotApplicable'
entity_dict['attributes'].append({
'key': str(column.key),
'type': column_type,
'possible_values': possible_values
})
return entity_dict
我认为在column.type的情况下str返回只是varchar。所以我做的是检查了column.type对象中是否存在名为enums的属性,如果它在那里我将column_type标记为ENUM并从column.type.enums获取列的可能值。