【发布时间】:2014-03-06 17:24:35
【问题描述】:
假设我有 2 个类:Foo 和 Bar。假设一个 Foo 可以有许多条(通过 foo.Bars)。 Bar 有一个 end_date 来指示 bar 何时结束。未结束的小节默认设置为“9999-12-31”。
我在下面编写了两个查询来获得一个 Foo 但使用不同的条形过滤器,这样第一个查询就会给我没有结束的条形;第二个给了我已经结束的酒吧。
today = date.today().strftime("%Y-%m-%d")
current = session.query(Foo)\
.join(Bar)\
.filter(
and_(
Foo.code=='MY_STRING',
Bar.end_date >= today,
)
)\
.options(contains_eager('Bars'))\
.one()
previous = session.query(Foo)\
.join(Bar)\
.filter(
and_(
Foo.code=='MY_STRING',
Bar.end_date < today,
)
)\
.options(contains_eager('Bars'))\
.one()
由于某些原因,previous.Bars 与 current.Bars 相同,即使我们已过滤条形以使其不同(至少这是我的尝试)。例如。 current.Bars 返回 [bar1, bar2, bar3] 和 previous.Bars 返回 [bar1, bar2, bar3]。
如果我切换两个查询(即将previous 放在current 之前),则当前的Bars 与previous.Bars 相同。例如。 current.Bars 返回[bar4, bar5, bar6] 和previous.Bars 返回[bar4, bar5, bar6]。
请注意,我 100% 确定 previous.Bars 中的基础数据应该与 current.Bars 不同。 IE。我应该得到[bar4, bar5, bar6] 为previous.Bars 和[bar1, bar2, bar3] 为current.Bars
有人可以解释为什么我得到相同的结果吗?我该如何解决这个问题?我意识到最好只有一个查询。
提前致谢!
PS 我使用的是 0.8 版
【问题讨论】:
-
你使用的是什么版本的 SQLAlchemy?
-
@Drewness 我使用的是 0.8 版
标签: python sqlalchemy