es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Combinando los Resultados de UNIONes de SQLAlchemy

Cuando realizas algo como,

session.query(BaseModel, JoinModel).join(JoinModel, BaseModel.id == JoinModel.id), isouter=True)

El resultado es similar al siguiente,

(<__main__.BaseModel object at 0x000001E32BC81220>, <__main__.JoinModel object at 0x000001E32A15BE50>)
(<__main__.BaseModel object at 0x000001E32BC81220>, <__main__.JoinModel object at 0x000001E32A15BC70>)
(<__main__.BaseModel object at 0x000001E32BC81220>, <__main__.JoinModel object at 0x000001E32A317670>)

Cuando haces .__dict__ en uno de estos objetos (ya sea BaseModel o JoinModel) puedes obtener los valores de los atributos.

¿Existe una manera eficiente de combinar los atributos de ambos objetos para obtener un solo resultado? Quiero decir, en el final, idealmente debería ser solo un conjunto de valores, ¿verdad?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera eficiente de combinar los atributos de ambos objetos para obtener un resultado. En lugar de seleccionar tanto BaseModel como JoinModel en session.query(), puedes seleccionar los atributos deseados de ambas tablas y utilizar join() para obtener los datos necesarios para los respectivos atributos. De esta manera, los datos recuperados estarán en un conjunto de valores.

    Por ejemplo, digamos que quieres recuperar el atributo name de BaseModel y el atributo category de JoinModel y combinarlos para obtener un resultado. Podrías hacer algo como esto:

    result = session.query(BaseModel.name, JoinModel.category).\
             join(JoinModel, BaseModel.id == JoinModel.id, isouter=True).\
             all()
    

    Esto devolverá los atributos deseados de ambas tablas en una tupla:

    [('John', 'A'),
     ('John', 'B'),
     ('Jane', None),
     ('Mike', 'C')]
    

    Luego puedes acceder a los valores utilizando la indexación, por ejemplo, result[0][0] daría 'John' y result[0][1] daría 'A'.

Comments are closed.