2013-06-13 2 views
0

저는 계산을 수행하기 위해 선언적 SQLAlchemy 클래스를 사용하고 있습니다. 계산의 일부는 두 테이블 사이에 외래 키 관계가없는 다른 테이블에서 제공하는 모든 구성에 대해 계산을 수행해야합니다.서로 외래 키 관계가없는 개체에 컬렉션을 포함 할 수 있습니까?

이 비유는 실제 응용 프로그램과 같지 않지만, 내가 원하는 것을 이해하는 데 도움이 될 것입니다.

나는 자동차 세트와 페인트 색상 목록이 있습니다. 자동차 객체는 가능한 모든 색상

from sqlalchemy import * 
from sqlachemy.orm import * 

def PaintACar(car, color): 
    pass 

Base = declarative_base() 

class Colors(Base): 
    __table__ = u'colors' 

    id = Column('id', Integer) 
    color= Column('color', Unicode) 

class Car(Base): 
    __table__ = u'car' 

    id = Column('id', Integer) 
    model = Column('model', Unicode) 

    # is this somehow possible? 
    all_color_objects = collection(...) 

    # I know this is possible, but would like to know if there's another way 
    @property 
    def all_colors(self): 
     s = Session.object_session(self) 
     return s.query(A).all() 

    def CarColorFactory(self): 
     for color in self.all_color_objects: 
      yield PaintACar(self, color) 

내 질문에 차를 제공하는 공장이있다 : 어떻게 든 all_color_objects을 생산하는 가능을? 세션을 찾고 all_colors 속성에서와 같이 수동으로 쿼리를 실행하지 않아도됩니까?

+0

모든 점에 대해 존경심이 깊은 이유가 무엇입니까? 나에게 반대로 디자인 패턴 냄새. –

+0

세션을 받고 원하는 쿼리를 생성하는 것 외에 더 좋은 방법은 무엇입니까? 컬렉션에 추가 할 수 있고 자동으로 물건을 플러시 할 수있는 기능을 찾고 있습니까? (Session에 객체를 추가하기 만하면됩니까?) object_session (self)을 사용하는 것을 좋아하지 않습니까? (mixin 클래스 나 숨길 수있는 클래스를 만들 수 있습니까?) 문제가 무엇인지는 분명하지 않습니다. 여기에있는 객체는 부모 클래스와 아무런 관계가 없으므로 SQLAlchemy가 추가 할 수있는 특정 정보가 없습니다. – zzzeek

+0

@zzeek. 그건 기본적으로 - object_session (자기)에 대해 싫어하지만, 믹스 인 클래스를 제안한다면, 그걸로 살 수있을 것 같네요. 그걸 답으로 만들면 받아 들일거야. – paulluap

답변

0

나는 잠시 시간을 보냈다. 그래서 나는 (zzzeek의 의견으로) 내가 본 최고의 대답을 제공하고있다. 기본적으로, 나는 일회성 구문 설탕을 찾고있었습니다. 내 원래의 '못생긴'구현은 잘 작동합니다.

더 좋은 방법은 여기에 세션을 가져 오는 것 외에 쿼리를 생성하는 것입니다. 을 원하십니까? 컬렉션에 추가 할 수있는 기능을 찾고 있습니까? 그리고 자동으로 일을 플러시 하시겠습니까? (Session에 객체를 추가하기 만하면됩니까?) object_session (self)> (믹스 인 클래스를 만들거나 을 숨길 수있는 클래스를 만들 수는 없습니까?) 문제가 무엇인지 명확하지 않습니다. 여기에있는 객체는 부모 클래스 인 과 아무 관계가 없으므로 SQLAlchemy가 추가 할 수있는 특별한 지능이 없습니다. - zzzeek Jun 17 at 5:03

관련 문제