jueves, 26 de enero de 2017

Insertar datos de un archivo excel a una base de datos




Saludos y gracias por leer mis publicaciones, en mi corta experiencia en el desarrollo de software he aprendido, que no solo es importante crear programas que  resuelvan una  situación especifica sino que ademas es necesario crear soluciones para gestionar los datos que utiliza una aplicación. 

Un ejemplo de esto: Imaginemos que  desarrollamos un sistema de gestión de datos para una empresa determinada, que requiere llevar los datos de sus empleados, los departamentos, los cargos , entre otros. Ahora imaginemos que en la empresa se inicia el proceso de carga inicial de datos en el sistema y que los usuarios encargados de esto tienen que registrar información correspondiente a una gran cantidad de empleados (digamos que unos 100),  lo cual no seria muy agradable para ellos sin mencionar el tiempo que le dedicaran a esta tarea utilizando la interfaz que ofrece el sistema para ello, aquí surge  la necesidad de agilizar este proceso  .

Existen empresas en las cuales se hace uso de microsoft  excel para registrar parte de la información que utilizan en sus actividades, por lo cual surge la posibilidad de que gran parte de los datos necesarios para el sistema se encuentren en archivos excel, siendo este el caso podemos ofrecer a los usuarios una solución que lleve los datos del archivo excel a la base de datos de nuestro sistema , a continuación les muestro en pasos una solución sencilla con python: 

  • Debemos asegurarnos que la información a cargar se encuentre organizada de tal manera que concuerde con la tabla en la cual realizaremos  la insercion  de los datos, para este ejemplo realizare la carga de 8 registros que contienen información básica de empleados y que se encuentra en un archivo excel llamado: usuarios.xlsx, la cual sera cargada a la tabla empleados  que pertenece a la base de datos que he llamado prueba.


tabla empleados donde se cargaran los datos
Tabla empleados donde se insertaran los registros



Datos a cargar en la base de datos
Datos que desean insertarse en la tabla empleados





  • El siguiente paso es poder acceder al archivo: usuarios.xlsx , para esto voy a utilizar la librería openpyxl  que permite manipular archivos excel con python, al final de la entrada encontraran los enlaces de su documentación oficial.
Recorrer archivo excel para obtener los datos que desean cargarse 





a continuación la explicación del código anterior  utilizado para obtener los datos desde el archivo excel:



  • Linea 1: se importa el modulo openpyxl el cual nos provee las funciones utilizadas para trabajar con archivos excel.
  • Linea 4: se utiliza el metodo; openpyxl.load_workbook() , para cargar el archivo donde se encuentran los datos.
  • Linea 5: se obtiene la hoja del archivo excel en donde se encuentran los datos mediante el metodo: get_sheet_by_name() , el cual nos permite obtener una hoja del archivo pasando como parámetro su nombre, en mi caso es 'empleados'.
  • Linea 7: indica la fila que contiene el primer registro que desea insertarse.
  • Linea 8: indica la fila que contiene el ultimo registro que desea insertarse.
  • Linea 9: consiste en una lista vacia llamada: registros , en la cual almacenare los datos recolectados desde el archivo excel.
  • desde la linea 12 a la linea 17: se recorren las filas especificadas, se obtienen y se van guardado en la lista empleados los tres datos de cada fila que corresponden a los campos: nombre, apellido y usuario.
  • en la lineas 19 y 20 , se recorre la lista empleados que contiene los datos obtenidos desde el archivo excel y se imprimen los datos correspondientes a cada registro lo cual nos da:
Datos obtenidos desde el archivo excel

  • Nuestro siguiente paso es almacenar los datos obtenidos en la tabla empleados, para esto utilizaremos la libreria: MySQLdb , al final coloque un enlace que contiene documentación relacionada.
Coneccion a la base de datos e inserción de los registros

  • En la linea 24  usamos el método: MySQLdb.connect(), por medio del cual nos conectamos a la base de datos : que se encuentra en el servidor local : 'localhost' ingresaremos como usuario 'root', en mi caso la base de datos no posee contraseña y cuyo nombre es: 'prueba'.
  • Linea 25: creamos el puntero .
  • Linea 26 inicia el recorrido sobre la lista registro para insertar sus elementos en la tabla empleados.
  • Las lineas 27 y 28 deben formar una sola linea en la imagen aparecen como dos debido a que se me hizo mas facil poder mostrarla, en esta linea se crea una variable inserción donde se guarda la sentencia SQL que se encargara de insertar los datos en la tabla empleados.
  • Linea 30: ejecutamos la sentencia SQL almacenada en la variable inserción.
  • Linea 31: aquí estamos estamos indicando que deseamos hacer efectivo los cambios en la base de datos.
  • Linea 32: cerramos la conexión a la ase de datos.

La tabla empleados nos quedaría de la siguiente manera:

Registros cargados a la base de datos

Documentación openpyxl: openpyxl
Documentacion MySQLdb: MySQLdb
Referencias: 

  • ironsistem.com/tutoriales/python/leer-documentos-de-excel-con-python/
  • http://librosweb.es/libro/python/capitulo_12/conectarse_a_la_base_de_datos_y_ejecutar_consultas.html

lunes, 11 de julio de 2016

Juegos 2d con python y pygame

Todos tenemos un área de la programación que nos atrae, hay quienes prefieren estar  prácticamente en todas partes   gracias a la programación web, otros que se sienten identificados con el desarrollo móvil y su popularidad actual, también están aquellos que se  dedican a las aplicaciones de escritorio e incluso hay quienes dedican tiempo a todas.


 Por mi parte desde que era un niño siempre me llamaron la atención los videojuegos pero a esa edad no imagine programarlos , sin embargo cuando curse mi carrera en la universidad y en cada asignatura relacionada con la programación siempre practicaba tratando de elaborar un videojuego, pero como mi primer lenguaje de programación fue: C , muchos me comentaban que era complicado y que ese no era un lenguaje para aficionados y decaí un poco en mi afán de programar videojuegos.


Más adelante tuve la oportunidad de cursar python  en una materia llamada: inteligencia artificial y cuyo proyecto final era programar un videojuego en python y pygame,  y desde allí recobre un poco el interés por el  desarrollo de videojuegos, siempre fue creyente de iniciar con cosas pequeñas e ir creciendo poco a poco, pensar en proyectos que pueda terminar para mantenerme motivado.


Les presento un básico videojuego mata marcianos, al cual llame defensor y me inspire en juegos clásicos como galaga, galaxian y el recordado space invanders, consta de 11 niveles y a partir del nivel 6 aparecen enemigos un poco más inteligentes y no podría faltar el clásico jefe final.
El juego también cuenta con ítems que pueden aumentar nuestras posibilidades de ganar.









  • Programado en python 2.7 y pygame 1.9.
  • Gráficos echos con corel draw.
  • Sonidos extraídos de las paginas:    sonidos 1sonidos 2                                                                                                                                                

Mi hermano moisés , me ayudo con el diseño y los gráficos, supongo que comparte el entusiasmo de los videojuegos conmigo :-).


Codigo del juego: aqui






   

sábado, 9 de julio de 2016

Practica basica de reportlab con python

Les presento una pequeña practica de reportlab donde muestro:

  •  como pintar figuras básicas (rectángulos,círculos, lineas)
  • como agregar texto.
  • como cargar imágenes.
  • como abrir automáticamente el archivo pdf creado.

Como material de apoyo para la practica les de:


                                                             codigo_tutorial


Medidas por defecto de un documento pdf creado con python y reportlab.

Archivo pdf con lineas guía para ubicar las coordenadas en el documento.





Introduccion a reportlab

Reportlab es una librería  para el lenguaje de programación python, orientada a objetos, que ofrece módulos para la creación de documentos pdf a partir de código .

Es de gran utilidad ya que la emisión de reportes y comprobantes  en ocasiones son requerimientos de ciertas aplicaciones, situación que en ocasiones puede resolverse exportando datos en formato pdf.
Esta librería nos permite utilizar un gran número de opciones  para nuestros documentos, entre lo que podemos usar se encuentran:

·         Texto, dibujo e imágenes (formas básicas): Objeto  canvas, donde.

Ø  Mostrar texto: canvas. drawString (pos_x, pos_y,”Texto”).
Ø  Mostrar imagen: canvas.drawImage (“archivo”, inicio_x, incio_y, ancho, alto).
Ø  Líneas: canvas.line (inicio_x, inicio_y, fin_x, fin_y).
Ø  Rectangulos: canvas.rect (inicio_x, inicio_y, ancho,alto,stroke=1,fill=0).
Ø  Círculos: canvas.circle (inicio_x, inicio_y, radio, stroke=1,fill=0).
Ø  Cuadricula: canvas.grid(lista_puntos_x,lista_puntos_y)
Ø  Arco: canvas.arc(inicio_x,inicio_y,fin_x,fin_y)
Ø  Elipse: canvas.ellipse(inicio_x,inicio_y,fin_x,fin_y,stroke=1,fill=0)

Donde stroke se refiere al ancho de las lineas de borde de la figura y fill se refiere al tipo de relleno que tendra la figura.

·         Tablas:
Ø  Objeto: Table()
·         Gráficos:
Ø  Gráficos de barras: Objeto   VerticalBarChart()
Ø  Gráficos de líneas: Objeto  HorizontalLineChart()
Ø  Gráficos circulares: Objeto Pie()

Para visualizar todas las opciones que nos ofrece esta librería, recomiendo consultar la documentación que esta disponible para su descarga, desde su  página oficial, de la cual extraje las siguientes capturas:





martes, 5 de julio de 2016

Un tutor matemático echo en python (ecuaciones lineales)


Las matemáticas son una de las áreas  más difíciles de dominar  en la etapa estudiantil, particularmente a mí me pasó en la época de bachillerato y siempre buscaba apoyo en los libros para mis sesiones de estudio,  pero en ocasiones me encontraba con un problema, y era que  los libros no ofrecían las respuestas de todos los ejercicios planteados, lo cual me llenaba de inseguridad ya que no sabía si mi respuesta  para ciertos ejercicios era la correcta.


Igual que me paso a mí, tengo familiares que  desean una guía para el aprendizaje de ciertos aspectos de la matemática, si bien es cierto que en la actualidad existe una gran cantidad de programas que se encargan de resolver  problemas matemáticos que van desde los más simples a cálculos más avanzados, decidí ponerme a prueba y crear una aplicación sencilla que muestre la manera de resolver un problema matemático, y dado que uno de mis familiares encontró cierta dificultad en aprender a resolver ecuaciones  lineales, opte por crear una aplicación sencilla que lo acompañe  en su aprendizaje.


Para realizar el Tutor de Ecuaciones de Primer Grado (TEPG) utilice:
  • ·         El lenguaje de programación  Python en su versión  3.5
  • ·         La librería PyQt 5, para la interfaz gráfica.
  • ·         La librería reportlab para mostrar la resolución del ejercicio en formato pdf.             
      Enlaces relacionados:

Tutor matematico
TEPG : ventana principal.

TEPG: ecuación resuelta

Archivo pdf con la solución a la ecuación.


Primer paso


Gracias a la programación y a los lenguajes de programación, en la actualidad existen aplicaciones casi para cualquier cosa imaginable, aplicaciones básicas como una calculadora, programas de entretenimiento por ejemplo: los videojuegos   y programas complejos como son los sistemas operativos  solo por mencionar algunos. Todos los que somos entusiastas de esta área de la informática y más aun los que somos autodidactas, en ocasiones decaemos al ver lo rápido que evoluciona  y llegamos a sentir que no podremos ser competitivos , cosa que veo como un error.

Si bien el camino de la programación no es fácil,  soy creyente de que la práctica, un espíritu de investigador, la perseverancia y el creer en nuestras ideas, nos ayudara a ser cada día mejores y con esto no quiero decir que podamos crear una aplicación súper  famosa y exitosa, aunque pensándolo bien ,  ¿ por qué no ?.  


Este blog nació como un espacio para compartir ideas (que mientras avanzo en este camino espero que sean cada vez más complejas)  y su desarrollo en un lenguaje de programación, con todos aquellos entusiastas que al igual que yo disfrutan el observar, tener ideas y más importante hacerlas realidad.