miércoles, 4 de junio de 2014

Sexto programa de Python Conexiones a Base de Datos

Una parte importante y lo mas real en casi todo entorno de trabajo automatizado, es la interacción con base de datos. Para este fin Python nos ofrece una manera
sencilla de trabajar con bases de datos.
Debemos tomar en cuenta la versión de Python que estemos usando para instalar la libreria específica para la base de datos que estemos usando.
Vamos a ver un programa que realiza una tarea muy comun:
1. Conectarse a una base de datos
2. Consultar una tabla
3. Exportar los resultados a un archivo de texto

Increíble que esto lo podamos hacer con tan pocas líneas, en este ejemplo usé Oracle. Y en esta ocasión colocaré imágenes en vez de texto (adiós copy/paste) hahaha,
veamos que tal.
Vemos que en las primeras líneas estamos haciendo un import de componentes externos, en este caso tenemos que instalas el modulo cx_Oracle que nos permite trabajar con bases de datos Oracle, para casos en que uses PostgreSQL, MySQL, SQLite deberás buscar el módulo adecuado y seguir los pasos de su instalación, tomar en cuenta que los módulos de base de datos van de acuerdo a la version de Python que estés usando.
Otro punto importante es notar que podemos especificar un name a nuestro gusto (cx_Oracle as ora) eso ayuda cuando el nombre del módulo que importamos tiene un nombre muy largo.
Con makedsn construimos una cadena de conexión para el metodo connect, vemos que el primer parámetro es el IP del servidor de la BDD, segundo el puerto, y tercero el nombre de la base de datos (SID por ejemplo).
Una vez teniendo el dsn nos conectamos con el user/password de la base de datos.
Estando conectados podemos ejecutar DML y extraer datos, en este caso volcamos los resultados a un archivo de texto llamado "tablares.txt"

Al ejecutar el programa deberas ver lo siguiente:

En donde 11.2.0.1.0 es la version de mi base de datos y seguido el tiempo que tomo el proceso en crear el archivo de texto con todos los registros.

Luego podremos ver que se ha creado el archivo de texto "tableres.txt"


Espero que les ayude, ya saben que bienvenidas son las preguntas!
Un saludo!

Quinto programa con Python (Clases)

Para este programa vamos a ver que tal se maneja el concepto de Clase con Python, revisemos línea a línea el siguiente programa para ver a que corresponde cada una.
Como siempre te invito a copiar (a mano) las lineas que no tienen # por delante, ya que como sabemos son comentarios que el compilador ignora.
Este programa escribirá todo lo que el usario le envie por consola en un archivo de texto, terminará cuando el usuario escriba Adios.

#Una clase se define mediante la palabra clase class
class Archivo:
#Viniendo de Java lo primero que intente ubicar fue un constructor, en el caso de python, este se define como __init__, y algo muy importante es nunca olvidar
#el parametro self, de olvidarlo veras algo como "TypeError: function() takes 0 positional arguments but 1 was given".
#self viene a ser algo asi como el this de java, es decir los atributos de instancia que persisten a traves de la vida del objeto.
    def __init__(self, name, content):
        self.name = name
        self.content = content
        print("Archivo llamado ", name)

#En java tenemos la palabra private para indicar que un atributo o metodo es privado, en python esto lo podemos hacer para los metodos con un doble subrayado, 
#veremos que la forma de utilizar (llamar) estas funciones es un tanto diferente, no olvidar el parametro self
    def __escribir(self):
        t = input("Escriba > ")
        self.content += "\n" + t

#Este metodo es normal, tal como lo habiamos visto en el programa 4
    def leer(self):
#Validamos el contenido del archivo antes de leerlo
        if len(self.content) == 0:
            print("Archivo no tiene contenido, escriba algo")
        else:
            print("cat " + self.name + "\n",self.content)


#Uso de la clase
#Vamos a instanciar un objeto de nuestra clase
#Recordar que arriba colocamos el metodo de inicializacion con los parametros de nombre del archivo y algo de contenido, notar que el self no debe ser cargado por 
#nosotros
a = Archivo("CV.doc", "")

#Ofrecemos las instrucciones, notar que con triple doble comilla podemos imprimir lineas tal cual como las escribimos en el fichero de fuente.
print("""Escriba:
    e para escribir
    l para leer
    bye para salir""")
    
#Entramos a un blucle infinito, que se encargara de interactual con el usuario
while True:
    r = input("> ")
    if r == "bye":
        print("Adios")#Si el usuario escribe Adios salimos del programa
        break
    elif r == "e":
#Observar el llamado a la funcion que definimos privada, a es el identificador de la instancia, seguido de un underline y el nombre de nuestra clase (Archivo) doble 
#subrayado y el nombre de nuestra funcion.
        a._Archivo__escribir()#Llamado a una funcion privada
    elif r == "l":
        a.leer()
    else:
        print("Opcion no valida")
             
         
Bueno, eso ha sido todo por hoy. Ya podemos definir clases, sabemos como instanciarlas y construir inicializadores segun las necesidades de nuestro objeto.
Podemos acceder a funciones privadas y publicas de una clase.
Un saludo, bienvenidas son las preguntas!