Problemas eagerloading um conjunto de objeto usando SQLAlchemy

votos
2

Estou usando Turbogears2 e SQLAlchemy para desenvolver um webapp. Eu tenho duas tabelas mapeadas O1 e O2. O2 tem uma lista ordenada de O1s em 'uns'. Em algum momento eu quero consultar todos O2 ea referenciada O1 de.

Infelizmente, a consulta abaixo falhar porque a tabela O2 é alias na consulta ea coluna referenciada pela frase order_by não sabe é.

Eu gostaria de saber como posso corrigir isso enquanto problema, se possível, ficar na sintaxe declarativa.

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
Publicado 19/05/2009 em 22:57
fonte usuário
Em outras línguas...                            


1 respostas

votos
3

Use um lambda de elementos cláusula para conseguir a ligação tardia da ordem de, como este:

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

Ou como uma outra opção, fazer todo o order_by uma corda, como esta:

ones = relation('O1', order_by='O1.value, O1.something_else')
Respondeu 19/05/2009 em 23:08
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more