lunes, abril 04, 2011

Multiple relación a la misma tabla con Declarative SQLAlchemy 0.6

En el manual de SQLAlchemy la solución no es muy clara para la forma declarative, me arrojaba el siguiente error
sqlalchemy.exc.ArgumentError: Column-based expression object expected for argument 'primaryjoin'; got: 'False'
Al ver Column-based expression supuse que era el mismo tipo que en los filtros y así fué. La solución es simple como siempre, la pongo aquí para referencia.
class Registro(DeclarativeBase):
    __tablename__ = 'registro'
    
    #{ Columns    
    id = Column(Integer, primary_key=True)
    # folio único
    folio = Column(Integer, nullable=True)
    medic_id = Column(u'medic_id', Integer, ForeignKey('medic.id'))
    nursea_id = Column(u'nursea_id', Integer, ForeignKey('nurse.id'), nullable=True)
    nurseb_id = Column(u'nurseb_id', Integer, ForeignKey('nurse.id'), nullable=True)
    room_id = Column(u'room_id', Integer, ForeignKey('room.id'))
    status_id = Column(u'status_id', Integer, ForeignKey('status.id'))
    fecha = Column(u'fecha', Date(timezone=False), primary_key=False, nullable=True)
    patient = Column(u'patient', Unicode(255), nullable=False)
    patient_age = Column(u'patient_age', Integer, nullable=True)
    mat = Column(u'mat', Unicode(255), nullable=False)
    kit_id = Column(u'kit_id', Integer, ForeignKey('kit.id'))
    hour_in = Column(u'hour_in', Unicode(16), nullable=False)
    hour_out = Column(u'hour_out', Unicode(16), nullable=False)
    diagnosis = Column(u'diagnosis', Text(length=None, convert_unicode=True, \
        assert_unicode=None), primary_key=False)
    procedure = Column(u'procedure', Unicode(255), nullable=False)
    notes = Column(u'notes', Text(length=None, convert_unicode=True, \
        assert_unicode=None), primary_key=False)
la relación dentro la misma clase queraría así
    #{ Relations
    
    medic = relation(Medic)
    kit = relation(Kit)
    status = relation(Status)
    room = relation(Room)
    nursea = relation(Nurse, primaryjoin=nursea_id == Nurse.id)
    nurseb = relation(Nurse, primaryjoin=nurseb_id == Nurse.id)
    
    #}

No hay comentarios.: