2012-07-04 2 views
3

내가 뭘 하려는지 SqlAlchemy 엔터티 정의에서 모든 Column(), 해당 형식 및 제약 조건을 확인하고 pre-validate, 데이터 변환 및 사용자 지정 양식을 사용자에게 표시 할 수 있습니다.SQLAlchemy 인트로 검사

어떻게 내 고찰 할 수 있습니까?

예 :

class Person(Base): 
    ''' 
     Represents Person 
    ''' 
    __tablename__ = 'person' 

    # Columns 
    id = Column(String(8), primary_key=True, default=uid_gen) 
    title = Column(String(512), nullable=False) 
    birth_date = Column(DateTime, nullable=False) 

나는 (제목 문자열 최대 길이는 512입니다 또는 birth_date이 날짜 등과 같은)

감사 그들의 제한을 결정,이 ID, 제목, 생년월일을 얻으려면 너

답변

6

sqlalchemy 0.8을 사용하는 경우 새로운 기능 New Class Inspection System을 확인해야합니다. 문서의 샘플 코드 추출물 :

class User(Base): 
    __tablename__ = 'user' 

    id = Column(Integer, primary_key=True) 
    name = Column(String) 
    name_syn = synonym(name) 
    addresses = relationship(Address) 

# universal entry point is inspect() 
>>> b = inspect(User) 

# column collection 
>>> b.columns 
[<id column>, <name column>] 

그렇지 않으면, 문서의 Accessing Tables and Columns 부분을 참조하십시오. 다시, docu에서 코드 추출 :

employees = Table(...) 
# or if using declarative 
#employees = Employee.__table__ 

# or just 
employees.c.employee_id 

# via string 
employees.c['employee_id'] 

# iterate through all columns 
for c in employees.c: 
    print c 

# access a column's name, type, nullable, primary key, foreign key 
employees.c.employee_id.name 
employees.c.employee_id.type 
employees.c.employee_id.nullable 
employees.c.employee_id.primary_key 
employees.c.employee_dept.foreign_keys 
+1

니스, 고마워. 열 자체에 메타 정보가 없다는 것을 예상하지 못했기 때문에 액세스하려고했습니다. 사용자 .__ getattr __ ('name') –