如何获取所有列名称&他们的类型,包括ENUM(及其可能的值)

时间:2017-12-12 10:41:45

标签: python sqlalchemy

我编写了以下代码来获取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))

有什么建议吗?

1 个答案:

答案 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获取列的可能值。