4

python的相对新手,甚至sqlalchemy的新手。我有以下内容:

没有子查询,当我加入 2 个没有子查询的表时,返回的每一行本质上是 2 个对象:

query = DBSession.query(Table1,Table2).outerjoin(Table2,Table1.id==Table2.id)
   for row in query:
       # returns (<myproject.models.Table1 object at 0x3ad2e50>,<myproject.models.Table2 object at 0x3ad2e50>)

使用子查询,行为会发生变化:

subquery = DBSession.query(Table1).order_by(Table1.d.desc()).subquery() 
query = DBSession.query(subquery,Table2).outerjoin(Table2,subquery.c.id==Table2.id).group_by(subquery.c.id) 



for row in query:
    # hoping for 2 objects (<myproject.models.Table1 object at 0x3ad2e50>,<myproject.models.Table2 object at 0x3ad2e50>)
    # receiving (1,'Dave Thomas',10001,<myproject.models.Table1 object at 0x3ad2e50>)

如何为上面的子查询获取 2 个对象?Table1 的列可能有一天会改变,因此我不知道元组中的位置。

谢谢!

4

2 回答 2

0

这会奏效吗?

subsubquery = DBSession.query(Table1).order_by(Table1.d.desc()).subquery() 
subquery = DBSession.query(subsubquery,Table2).outerjoin(Table2,subsubquery.c.id==Table2.id).group_by(subsubquery.c.id).subquery( with_labels = True )
query = DBSession.query(Table1,Table2).select_from( subquery )
于 2013-10-22T21:33:11.983 回答
0

您是否尝试过为子查询使用别名?

于 2014-06-14T17:57:46.787 回答