是否可以在SQLAlchemy查询中通过联接指定列?

时间:2015-03-12 21:59:58

标签: python mysql sqlalchemy

我在模型中设置了关系,因此SQLAlchemy知道如何将一些表连接在一起。有了这个,我想在查询时预先指定所有这些列,以便只运行一个查询。我认为它是这样的:

q = mysql_session.query(SomeItem.col1,
                        SomeItem.some_relationship1.name,
                        SomeItem.some_relationship2.name,
                        SomeItem.col2)

但这给了我错误:

AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with SomeItem.some_relationship1 has an attribute 'name'

最简单的方法是什么?现在,我正在执行:q = mysql_session.query(SomeItem)然后循环执行q,但这需要运行大量额外查询,这非常缓慢且不必要。

1 个答案:

答案 0 :(得分:0)

我想通过明确提到连接可以做到这一点。如果有人以更简洁的方式回答这个问题,我仍然喜欢它,因为联接确实应该被隐含(如问题中的示例所示)。无论如何,这有效:

q = mysql_session.query(SomeItem.col1,
                        SomeItem.col2,
                        SomeOtherItem1.name,
                        SomeOtherItem2.name)\
    .join(SomeOtherItem1)\
    .join(SomeOtherItem2)