如何遍历此sqlalchemy查询?

时间:2013-09-28 01:29:12

标签: python sqlalchemy

相对于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的列可能有一天会改变,因此我不知道元组中的位置。

谢谢!

2 个答案:

答案 0 :(得分: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 )

答案 1 :(得分:0)

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