2012-06-12 4 views
2

저는 Flask에서 SQLAlchemy를 사용하고 있습니다. 내 시스템이 들어갈 수있는 모드를 나타내는 테이블이 있습니다. 각 모드에 적용 할 수있는 고도 목록이 포함 된 테이블도 있습니다. (이것은 다 대 다 관계입니다.) 이전에 표에 매핑 된 클래스에 속성 (예 : elevations, ScanModes)을 추가 한 경우 대상도 클래스였습니다.SQLAlchemy에서 클래스없는 값과의 관계를 만들려면 어떻게해야합니까?

클래스에서 입면도를 감싸고 (해당 테이블을 만드시겠습니까?) relationship을 사용하여 ScanModes.elevations을 사용할 수 있습니까? 아니면 query-enabled property을 사용해야합니까? 나는 또한 다른 제안에 열려 있습니다. 필요하면 더 쉽게 물론

from sqlalchemy.orm import mapper 
class ElevationMode(object): 
    pass 

mapper(ElevationMode, elevation_mode_table) 

class ScanModes(db.Model): 
    elevations = relationship(ElevationMode) 

, 그냥 ElevationMode가 처음에 선언 된 클래스가 될 것입니다 :

elevation_mode_table = db.Table('elevation_mode', db.metadata, 
           db.Column('scan_mode', db.String, 
              db.ForeignKey('scan_modes'), 
              nullable=False), 
           db.Column('elevation', db.Float, 
              nullable=False), 
           db.PrimaryKeyConstraint('scan_mode', 
                 'elevation')) 

class ScanModes(db.Model): 
    scan_mode = db.Column(db.String, primary_key=True) 
    elevations = ? 

    def __init__(self, scan_mode): 
     self.scan_mode = scan_mode 

답변

3

가장 간단한 방법은 클래스에 elevation_mode_table 매핑하는 것 elevation_mode_table을 처리하면 ElevationMode.__table__ ...

"쿼리 사용 가능 속성"아이디어는 여기에 있습니다. 관계의 캐싱 이점을 잃어 버릴 수도 있지만 그렇게 할 수도 있습니다.

+0

감사합니다. 나는 이것을 아침에 시험 할 것이다. 사이트에 와서 사람들에게 도서관을 지원해 주셔서 감사합니다. –

+0

나는 이것이 내가 찾고있는 것이 아니라고 생각한다; 어쩌면 내가 원하는 것은 "SQLAlchemic"만큼 충분하지 않습니다. 나는'elevation' 속성이'elevation_mode_table'에서 가져온 값들의 풀린 목록 일 수 있다고 상상하고있었습니다. 나는 여기에 'ElevationMode' 객체 내부에서 캐싱을 수행했기 때문에 이것이 필요한 이유일까요? –

+0

지금 나는 캐싱과 속성을 코드 ('elevations'는'_elevations'로 이름이 변경됨)와 함께 목록으로 만들 수 있으며,'elevations'는 getter가'_elevations' 속성에서 추출한 목록을 반환하는 속성이 될 수 있습니다. –