2017-12-12 3 views
0

다음 코드를 작성하여 sqlalchemy의 모든 열 이름과 유형을 가져 왔습니다. 그러나, ENUM 형식의 경우 대신 Varchar 받고 있어요.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)) 

어떤 제안을 내가 SQLAlchemy의에서 새로운 열거를 만들려면 다음 방법을 사용하고

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 

?

답변

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 

st.tr의 경우 column.type이 varchar 인 경우에만 반환되는 것으로 생각합니다. 그래서 내가 한 일은 column.type 개체에 enums라는 특성이 있는지 확인한 다음 거기에있는 경우 column_type을 ENUM으로 표시하고 column.type.enums에서 열에 대해 가능한 값을 얻었습니다.