使用SQLAlchemy急切加载一组对象的问题

时间:2009-05-19 21:57:26

标签: python orm sqlalchemy

我正在使用Turbogears2和SQLAlchemy开发一个webapp。我有两个映射表O1和O2。 O2在'ones'中有一个O1的排序列表。 在某些时候,我想查询所有O2和引用的O1。

不幸的是,下面的查询失败了,因为表O2在查询中有别名,而order_by短语引用的列不再是已知的。

我想知道如何解决这个问题,如果可能的话,请保留声明性语法。

base = declarative_base()

class O1(base):
    __tablename__ = 'O1'
    value = Column(Integer)
    o2_id = Column(Integer, ForeignKey('O1.id')) # The culprit

class O2(base):
    __tablename__ = 'O2'
    id = Column(Integer, primary_key=True)
    ones = relation('O1', order_by = ['O1.value'])


Session.query(O2).options(eagerload('ones')).all() # Throws an error

1 个答案:

答案 0 :(得分:3)

使用lambda of子句元素来实现订单的后期绑定,如下所示:

ones = relation('O1', order_by=lambda:[O1.value])

或者作为另一种选择,将整个order_by一个字符串,如下所示:

ones = relation('O1', order_by='O1.value, O1.something_else')