本站消息

站长简介/公众号


站长简介:高级软件工程师,曾在阿里云,每日优鲜从事全栈开发工作,利用周末时间开发出本站,欢迎关注我的微信公众号:程序员总部,程序员的家,探索程序员的人生之路!分享IT最新技术,关注行业最新动向,让你永不落伍。了解同行们的工资,生活工作中的酸甜苦辣,谋求程序员的最终出路!

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2021-11-24 20:25     阅读(481)     评论(0)     点赞(18)     收藏(3)



我编写了以下代码来获取 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 中创建一个新的 Enum:

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))

有什么建议?


解决方案


好的,我得到了解决方案。我是这样解决这个问题的:

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







所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1089592/3369bb35936c2fafc1ea/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

18 0
收藏该文
已收藏

评论内容:(最多支持255个字符)