SQLAlchemy: filter_by с like () для внешнего атрибута - PullRequest
1 голос
/ 01 июня 2011

У меня есть следующие модели:

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: Ни объект «InstrumentedAttribute», ни объект «Comparator» не имеют атрибута «состояние»

Как я могу отфильтровать свой запрос по значению столбца в таблице, которая связана с таблицей, которую я запрашиваю через внешний ключ?

Ответы [ 2 ]

3 голосов
/ 02 июня 2011

Попробуйте:

state = 'some value'
crsRuns = Session.query(CRRun)
crsRuns = crsRuns.options(eagerload('cr')) \
    .filter(CRRun.cr.has(
        CR.state.like('%' + state + '%')
    ))
1 голос
/ 07 июня 2011

Я закончил тем, что сделал следующее:

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