2012-08-29 8 views
4

나는 두 가지 모델이 있습니다SQLAlchemy의의 column_property 기본

class Report(Base): 
    __tablename__ = 'report' 
    id = Column(Integer, primary_key=True) 

class ReportPhoto(Base): 
    __tablename__ = 'report_photo' 
    id = Column(Integer, primary_key=True) 
    report_id = Column(Integer, ForeignKey(Report.id), nullable=False) 

    report = relationship(Report, uselist=False, backref=backref('report_photo', uselist=True)) 

을 그리고 ReportPhoto 내 모든 레코드가 나타내는 모델을 보고서에 열을 추가하고 싶습니다.

class Report(Base): 
    __tablename__ = 'report' 
    id = Column(Integer, primary_key=True) 

    has_photo = column_property(
     select(ReportPhoto.any()) 
    ) 

하지만 오류 NameError: name 'ReportPhoto' is not defined를 얻을 : 나는 column_property이 방법을 사용하려고합니다. 이 문제를 어떻게 해결할 수 있습니까? 그런

답변

1

내가이 작업을 수행하는 방법을 표시되지 않을 수 있습니다 다른 사람에 대한 몇 가지 설명과 @Vladimir의 lliev의 응답에 추가됩니다.

뒤에 'foreign table referencing'column_property 이있는 테이블을 놓습니다. 이 경우 ReportPhoto 뒤에 보고서 을 삽입하는 것을 의미합니다. 이렇게하면 NameError가 해결되지만 ReportPhoto 외래 키 참조에 새 오류가 남습니다. 이를 해결하려면 외부 키 테이블 참조를 따옴표로 묶으십시오. 선언문 문서 (예 : declarative.py)를 참조하고 '관계 구성'을 살펴보고 구체적으로 외국 참조를 인용하는 부분을 읽으면 자세한 내용을 볼 수 있습니다.

class ReportPhoto(Base): 
    # This now goes first 
    __tablename__ = 'report_photo' 
    id = Column(Integer, primary_key=True) 
    # Notice the quotations around Report references here 
    report_id = Column(Integer, ForeignKey("Report.id"), nullable=False) 

    # Notice the quotations around Report references here 
    report = relationship("Report", 
      uselist=False, 
      backref=backref("report_photo", uselist=True)) 

class Report(Base): 
    # This is now _after_ ReportPhoto 
    __tablename__ = 'report' 
    id = Column(Integer, primary_key=True) 

    # ReportPhoto now exists and we will not trip a NameError exception 
    has_photo = column_property(
     select(ReportPhoto.any()) 
    ) 
: 코드와

,이 같을 것이다

2

뭔가 작업을해야합니다 :

class ReportPhoto(Base): 
     __tablename__ = 'report_photo' 
     id = Column(Integer, primary_key=True) 
     report_id = Column(Integer, ForeignKey('report.id'), nullable=False) 

    class Report(Base): 
     __tablename__ = 'report' 
     id = Column(Integer, primary_key=True) 
     report_photos = relationship(ReportPhoto, backref='report') 
     has_photo = column_property(
      exists().where(ReportPhoto.report_id==id) 
     )