""" Realizar un sistema para una escuela. - Este sistema permite registrar nuevos alumnos, profesores y cursos. - Un alumno es asignado a un curso y un curso puede tener asociado más de un profesor. - Los profesores tienen un horario que indica cuando están en cada curso. - El horario asociará un curso y un profesor para un día de la semana (Lunes, Martes, Miércoles, Jueves, Viernes, Sábado, Domingo), una hora desde y una hora hasta. - El sistema permitirá exportar los alumnos que pertenecen a un curso, el horario de cada profesor y el horario del curso. """ import csv import datetime from sqlalchemy import create_engine, ForeignKey, Column, \ Integer, String, Time, Sequence from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, relationship Base = declarative_base() class Alumno(Base): __tablename__ = 'alumno' id = Column(Integer, primary_key=True) nombre = Column(String, nullable=False) curso_id = Column(Integer, ForeignKey('curso.id')) curso = relationship('Curso', back_populates='inscrito') def __repr__(self): return self.nombre class Profesor(Base): __tablename__ = 'profesor' id = Column(Integer, primary_key=True) nombre = Column(String, nullable=False) horario_prof = relationship('Horario', order_by='Horario.hr_ini', back_populates='profesor') def __repr__(self): return self.nombre class Curso(Base): __tablename__ = 'curso' id = Column(Integer, primary_key=True) nombre = Column(String, nullable=False) inscrito = relationship('Alumno', order_by='Alumno.id', back_populates='curso') horario_curso = relationship('Horario', order_by='Horario.hr_ini', back_populates='curso') def __repr__(self): return self.nombre class Horario(Base): __tablename__ = 'horario' id = Column(Integer, Sequence('horario_id_seq'), primary_key=True) dia = Column(Integer) hr_ini = Column(Time) hr_fin = Column(Time) curso_id = Column(Integer, ForeignKey('curso.id')) profesor_id = Column(Integer, ForeignKey('profesor.id')) curso = relationship('Curso', back_populates='horario_curso') profesor = relationship('Profesor', back_populates='horario_prof') class ExportarCSV(object): def __init__(self, ruta): self.ruta = ruta def exprt_horario_prof(self, profesor): horario = profesor.horario_prof with open(self.ruta, 'w') as archivo: writer = csv.writer(archivo) for horas in horario: writer.writerow([horas.dia, horas.hr_ini, horas.hr_fin, horas.curso.nombre]) def export_hr_curso(self, curso): horario = curso.horario_curso with open(self.ruta, 'w') as archivo: writer = csv.writer(archivo) for horas in horario: writer.writerow([horas.dia, horas.hr_ini, horas.hr_fin, horas.profesor]) def export_alumnos_curso(self, curso): inscritos = curso.inscrito with open(self.ruta, 'w') as archivo: writer = csv.writer(archivo) for alumno in inscritos: writer.writerow([str(alumno)]) def main(*args, **kwargs): engine = create_engine('sqlite:///:memory:') Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) session = Session() # Creación de profesores prof1 = Profesor(nombre='Profesor_1') prof2 = Profesor(nombre='Profesor_2') prof3 = Profesor(nombre='Profesor_3') session.add(prof1) session.add(prof2) session.add(prof3) # Creación de Cursos curso1 = Curso(nombre='Curso_1') curso2 = Curso(nombre='Curso_2') curso3 = Curso(nombre='Curso_3') session.add(curso1) session.add(curso2) session.add(curso3) # Creación de Alumnos alumno1 = Alumno(nombre='Alumno_1', curso=curso1) alumno2 = Alumno(nombre='Alumno_2', curso=curso2) alumno3 = Alumno(nombre='Alumno_3', curso=curso3) session.add(alumno1) session.add(alumno2) session.add(alumno3) # Creación de objetos Hora hora1 = datetime.time(9, 0, 0) hora2 = datetime.time(12, 0, 0) hora3 = datetime.time(13, 0, 0) hora4 = datetime.time(15, 0, 0) # Creación de horas para iniciio y termino de clases horario1 = Horario(dia=2, hr_ini=hora1, hr_fin=hora2, curso=curso1, profesor=prof1) horario2 = Horario(dia=3, hr_ini=hora2, hr_fin=hora3, curso=curso2, profesor=prof2) horario3 = Horario(dia=4, hr_ini=hora2, hr_fin=hora3, curso=curso3, profesor=prof3) horario4 = Horario(dia=5, hr_ini=hora3, hr_fin=hora4, curso=curso1, profesor=prof3) session.add(horario1) session.add(horario2) session.add(horario3) session.add(horario4) session.commit() # Exportar Datos ExportarCSV('Horario_Docente_{}'.format(prof1)).exprt_horario_prof(prof1) ExportarCSV('Horario_Docente_{}'.format(prof2)).exprt_horario_prof(prof2) ExportarCSV('Horario_Docente_{}'.format(prof3)).exprt_horario_prof(prof3) ExportarCSV('Horario_Curso_{}'.format(curso1)).export_hr_curso(curso1) ExportarCSV('Horario_Curso_{}'.format(curso2)).export_hr_curso(curso2) ExportarCSV('Horario_Curso_{}'.format(curso3)).export_hr_curso(curso3) ExportarCSV('Alumnos_Inscritos_{}'.format(curso1)).export_alumnos_curso(curso1) ExportarCSV('Alumnos_Inscritos_{}'.format(curso2)).export_alumnos_curso(curso2) ExportarCSV('Alumnos_Inscritos_{}'.format(curso3)).export_alumnos_curso(curso3) if __name__ == "__main__": main()