2011-06-01 33 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 + '%') 
    ))