class Procedure(Base):
    __tablename__ = 'procedure'
__table_args__ = sqlalchemy.ForeignKeyConstraint(['consult_role_uid'], [
    'role.role_uid']), sqlalchemy.ForeignKeyConstraint(['inform_role_uid'],
    ['role.role_uid']), {'autoload': True, 'useexisting': True}
Procedure.consult_role = sqlalchemy.orm.relationship(Role, primaryjoin=
    'Procedure.consult_role_uid==Role.role_uid', foreign_keys=Role.role_uid)
Procedure.inform_role = sqlalchemy.orm.relationship(Role, primaryjoin=
    'Procedure.inform_role_uid==Role.role_uid', foreign_keys=Role.role_uid)
consult_role = sqlalchemy.orm.aliased(Role, name='consult_role')
inform_role = sqlalchemy.orm.aliased(Role, name='inform_role')
query = session.query(Procedure.procedure_name, consult_role.role_name.
    label('consult_role_name'), inform_role.role_name.label('inform_role_name')
    ).join((consult_role, Procedure.consult_role), (inform_role, Procedure.
    inform_role))
sqlalchemy: joining to the same table multiple times using declarative and reflection