Sqlalchemy: subquery in FROM must have an alias

后端 未结 1 1179
我寻月下人不归
我寻月下人不归 2021-01-01 23:21

How can I structure this sqlalchemy query so that it does the right thing?

I\'ve given everything I can think of an alias, but I\'m still getting:

Pr         


        
相关标签:
1条回答
  • 2021-01-01 23:38

    You are almost there. Make a "selectable" subquery and join it with the main query via join():

    foo_max_time_q = select([func.max(Foo.time).label('foo_max_time'),
                             Foo.id.label('foo_id')
                            ]).group_by(Foo.id
                             ).alias("foo_max_time_q")
    
    foo_q = session.query(
              Foo.id.label('foo_id'),
              Foo.version.label('foo_version'),
              Foo.revision.label('foo_revision'),
              foo_max_time_q.c.foo_max_time.label('foo_max_time')
                    ).join(foo_max_time_q, 
                           foo_max_time_q.c.foo_id == Foo.id)
    
    print(foo_q.__str__())
    

    Prints (prettified manually):

    SELECT 
        foo.id AS foo_id, 
        foo.version AS foo_version, 
        foo.revision AS foo_revision, 
        foo_max_time_q.foo_max_time AS foo_max_time 
    FROM 
        foo 
    JOIN 
        (SELECT 
             max(foo.time) AS foo_max_time, 
             foo.id AS foo_id 
         FROM 
             foo 
         GROUP BY foo.id) AS foo_max_time_q 
    ON 
        foo_max_time_q.foo_id = foo.id
    

    The complete working code is available in this gist.

    0 讨论(0)
提交回复
热议问题