SQLAlchemy:在外部属性上使用 like() 进行过滤

发布于 2024-11-11 07:50:15 字数 815 浏览 4 评论 0原文

我有以下模型:

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”对象都没有属性“state”

如何通过通过外键连接到我正在查询的表的表中的列的值来过滤查询?

I have the following models:

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))
    ...

I am then trying to do the following:

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

However, this causes the following error:

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

How can I filter my query by the value of a column in a table that's connected to the table I'm querying via a foreign key?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

嗼ふ静 2024-11-18 07:50:15

尝试:

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

Try:

state = 'some value'
crsRuns = Session.query(CRRun)
crsRuns = crsRuns.options(eagerload('cr')) \
    .filter(CRRun.cr.has(
        CR.state.like('%' + state + '%')
    ))
剪不断理还乱 2024-11-18 07:50:15

我最终做了以下事情:

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

I ended up doing the following:

crsRuns = Session.query(CRRun, CR, Run).join(CR).join(Run)
crsRuns = crsRuns.filter(CR.state.like('%' + state + '%'))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文