相对于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的列可能有一天会改变,因此我不知道元组中的位置。
谢谢!
答案 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)
您是否尝试过为子查询使用别名?