SQLAlchemy表达式语言:如何使用子查询连接表?

时间:2016-09-22 19:17:03

标签: python mysql sqlalchemy

我有一个子查询表inner_stmt,我想用表revisions加入。但是revisions.join()会出现以下错误:

Neither 'Label' object nor 'Comparator' object has an attribute 'c'

这是我的代码。我做错了什么?

inner_stmt = select([
        ratings.c.article_name,
        func.min(ratings.c.timestamp).label('mintime')]) \
    .group_by(ratings.c.article_name).label('firstga')

stmt = select([
        revisions.c.article_id,
        func.max(revisions.c.length_bytes)]) \
    .select_from(revisions.join(
        inner_stmt,
        revisions.c.article_name == inner_stmt.c.article_name)) \
    .group_by(table.c.article_id)        

1 个答案:

答案 0 :(得分:1)

label了子查询inner_stmtlabel用于列或表达式,即SELECT ... AS ...。您希望alias代替子查询表达式,即FROM ... AS ...。您无法从前者访问列(.c.<name>),即使在SQL中也是如此,因为它是SQL表达式。