2011-06-01 34 views
1

我有以下型號:的SQLAlchemy:filter_by與像()對外國屬性

class CRRun(Base): 
    ... 
    crID = Column(u'CR_ID', INTEGER(), ForeignKey(CR.id), primary_key=True, 
        nullable=False) 
    cr = relationship(CR, backref=backref("CR_RUN", uselist=False)) 
    ... 

class CR(Base): 
    ... 
    id = Column(u'CR_ID', INTEGER(), primary_key=True, nullable=False) 
    state = Column(u'STATE', VARCHAR(20)) 
    ... 

我再努力做到以下幾點:

state = 'some value' 
crsRuns = Session.query(CRRun) 
crsRuns = crsRuns.options(eagerload('cr')) 
       .filter(CRRun.cr != None) 
       .filter(CRRun.cr.state.like('%' + state + '%')) 

然而,這將導致以下錯誤:

AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object has an attribute 'state'

如何通過連接到表的表中的列的值過濾查詢通過fo查詢統治關鍵?

回答

1

最後我做了以下內容:

crsRuns = Session.query(CRRun, CR, Run).join(CR).join(Run) 
crsRuns = crsRuns.filter(CR.state.like('%' + state + '%')) 
2

嘗試:

state = 'some value' 
crsRuns = Session.query(CRRun) 
crsRuns = crsRuns.options(eagerload('cr')) \ 
    .filter(CRRun.cr.has(
     CR.state.like('%' + state + '%') 
    ))