假设我有2个类:Foo和Bar。假设一个Foo可以有很多条(通过foo.Bars)。小节有一个end_date来指示小节何时结束。尚未结束的钢筋默认设置为'9999-12-31'。即使他们有不同的过滤器,两个sqlalchemy查询返回相同的结果
我在下面写了两个查询来获得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
之前),那么当前的酒吧一样previous.Bars。例如。 current.Bars返回[bar4, bar5, bar6]
和previous.Bars
返回[bar4, bar5, bar6]
。
请注意,我100%确定previous.Bars中的基础数据应该与current.Bars不同。即我应该得到[bar4, bar5, bar6]
为previous.Bars
和[bar1, bar2, bar3]
为current.Bars
有人请解释为什么我得到了相同的结果?我该如何解决这个问题?我意识到,只有一个查询可能会更好。
在此先感谢!
PS我使用的是0.8版本
什么版本的SQLAlchemy您使用的是:因为你需要双方反正,只是做在Python端轻松这种分离? – Drewness
@Drewness我正在使用0.8版本 – ksindi