2014-10-07 4 views
1

내가 SQLAlchmey에 새로 온 사람, 나는 (뿐만 아니라 증류기를 사용하여) 다음 개체/DB 테이블 구조를 달성하기 위해 노력하고있어없이 콘크리트 테이블 상속 :SQLAlchemy의 (그리고 증류기) 다형성 조합

class BaseConfig(Base): 
pk = Column(Integer, primary_key=True) 
name = Column(Unicode(150), nullable=False, unique=True) 
... 
# Lots of other general columns, such as description, display_name, creation time etc. 

그리고 다른 모든 구성 클래스는 그것에서 미리 정의 된 열을 상속 할 :

class A(BaseConfig): 
    __tablename__ = "A" 
    column1 = Column... 
    column2 = Column... 

class B(BaseConfig): 
    __tablename__ = "B" 
    column1 = Column... 
    column2 = Column... 

BaseConfig 테이블

진짜 테이블, 일반적인 열을 보유 만 클래스가 아닙니다. 그 외 - A와 B 사이에는 아무런 관련이 없으며 공유 된 Pk 등은 필요하지 않습니다. " polymorphic_union"을 사용하는 것이 여기에도 관련이없는 것처럼 보입니다.

alembic 자동 생성을 실행하려고하면 BaseConfig에 테이블 매핑 클래스가 없다는 오류가 발생합니다. 이는 사실이며 BaseConfig에 "polymorphic union"옵션을 추가 할 이유가 없습니다. 이 클래스는 일반적입니다. 제안 사항이 있으십니까? (남쪽 장고에서는이 기능이 기본적으로 작동하지만 여기서는이 동작이 쉽게 지원되지 않는 것 같습니다).

감사합니다, 리

답변

6

어느 당신의 BaseConfig하지 서브 클래스 Base 실제 테이블을 않는 사용이나 mixin은 (문서의 Mixing in Columns 부분을 읽기), 모두 BaseBaseConfig 서브 클래스 :

class BaseConfig(object): 
    # ... 

class MyModel(BaseConfig, Base): 
    # ... 

을 또는을 사용하면됩니다. __abstract__ :

class BaseConfig(Base): 
    __abstract__ = True 
+0

나는 __abstract__ = True를 사용했는데, 정확히 내가 원하는 것을 수행합니다. – Lin