Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Programación en Pl/Python

2,474 views

Published on

  • Be the first to comment

Programación en Pl/Python

  1. 1. Programando con Pl/Python Ernesto Quiñones Azcárate ernesto@eqsoft.netEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 1/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  2. 2. ¿Que es Pl/Python? http://www.postgresql.org http://www.python.org http://www.postgresql.org/docs/9.2/static/plpython.htmlEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 2/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  3. 3. ¿Que es Pl/Python? ●Es un lenguaje para escribir funciones en PostgreSQL. ●Pero OjO ....... NO es un reemplazo a SQL o PL/SQL. ●Es una manera de extender la funcionalidad de PostgreSQL a labores que no se pueden llevar a cabo con Pl/PgSQL.EQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 3/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  4. 4. ¿Que no desde esperar de Pl/Python? ● Que sea más rápido para manipular data que Pl/PgSQL. ● Que puedas levantar todas las librerías habidas y por haber de Python para diversas labores, quizás la mayoría si pero no todas. ● Ahorrar recursos de procesamiento/ram en el servidor para tus funciones (procedimientos almacenados).EQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 4/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  5. 5. ¿En que casos usar Pl/Python? ● Cuando se requiera realizar labores extendidas en la base de datos, por ejemplo: mandar correos, realizar cálculos matemáticos avanzados, importar o generar datos formateados de forma extraña, etc. ● Cuando sabes programar en Python y no en Pl/Pgsql y no quieres aprender a programar en otro lenguaje.EQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 5/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  6. 6. Conoce PythonEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 6/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  7. 7. Conoce Python Comandos básicos: print “hola mundo” <­­ imprime algo en la consola A = 22             <­­ crea la variable “A” print A            <­­ imprime el valor almacenado                        en la variable “A” b=input(“dame #:”) <­­ solicita en la consola                        ingresar un valor y lo                        guarda en la variable “b”EQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 7/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  8. 8. Conoce Python (Los ... significan que debes presionar un “tab”) a=3 if a < 3: ...print “es menor que 3” else: ...print “es mayor o igual que 3” presionar 2 veces “enter” en la ultima linmensaje:EQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 8/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  9. 9. Conoce Python Para programar en Python es mejor utilizar un editor de texto cualquiera o alguno especializado en este lenguaje, grabar el programa como un archivo de extensión “.py” (no obligatorio) y luego ejecutarlos así:          python holamundo.py El resultado lo veremos en la consola del sistema operativo.EQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 9/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  10. 10. Conoce Python Arreglos. * Las “tuplas”, son conjuntos de datos como en una lista pero es inmutable, no se puede añadir o borrar elementos.      A=a,2,c,4      for valor in A:      ...print valor Los elementos entre paréntesis denotan una tupla dentro de otra.      A=a,2,c,4,(e,6)      for valor in A:      ...print valorEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 10/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  11. 11. Conoce Python Arreglos. * Los “diccionarios” son como los arreglos tradicionales, tienen un índice y un valor como parte de su estructura, se puede añadir y quitar datos.    Arreglo={a:123,b:holaprint Arreglo[b]    mundo,3:122} ahora veamos que obtenemos con esto:    for c in Arreglo:    ...print c Y ahora así:    for c in Arreglo:    ...print Arreglo[c]EQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 11/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  12. 12. Conoce Python El manejo de cadenas en Python es bastante avanzado y no requiere funciones externas. Concatenar:    a=hola a=aaa    b=mundo a+=bbb    print a+ +b print a Subcadena (el indice siempre empieza en 0):    a=hola mundo      print a[3] <­­ un dígito    print a[5:10] <­ una sección de cadena, como                    “substr”    print a[5:] <­ desde la posición 5 hasta el                   final de la cadenaEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 12/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  13. 13. Conoce Python Subcadena (el indice siempre empieza en 0): a=hola mundo print a[:5]   <­­ corta desde el inicio hasta la posición 5 print a[:­5]  <­­ corta los últimos 5 caracteres de la cadena print a[2:­5] <­­ corta desde la posición 2 hasta los 5                   Últimos caracteres de una cadena Una manera de armar cadenas formateadas es así:   X=12   Y=11   A=”el valor de X es: %d y de Y es:%d” % (X,Y)   print A Len, retorna la cantidad de caracteres de una cadenaEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 13/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  14. 14. Conoce Python Estructuras de control – WHILE:    X=10    Y=0    while Y < X:    ...Y += 1    ...print YEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 14/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  15. 15. Conoce Python Estructuras de control – FOR: for a in range(1,10): <­­­ ejecuta del 1 al 9 ...print a for a in range(10):   <­­­ ejecuta del 0 al 9 ...print a En una lista de valores: for a in (1,10,5,7):  <­­­ puede ser una tupla o un  ..print a                  diccionarioEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 15/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  16. 16. Conoce Python Estructuras de control – FOR: En un rango de números : for a in range(1,10,2):  <­­­ejecuta del 1 al 9 ...print a                   saltando de 2 en 2 for a in range(10,1,­3): <­­­ejecuta del 10 al 1 ...print a                   saltando de 3 en 3 for a,b in ((1,4),(2,5),(3,6)): <­­­ solo se acepta ...print a                           valores ...print b                           numéricos                                      enterosEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 16/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  17. 17. Conoce Python Estructuras de control Break: Permite salir de un loop   for c in range(1,10): <­­­ ejecuta del 1 al 6   ...print c   ...if c > 5:   ......break Estructuras de control Continue: Permite volver a iterar sin ejecutar el código que continua en el loop for c in range(1,10): <­­­ ejecuta del 1 al 5   ...if c > 5:    ......continue   ...print c  EQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 17/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  18. 18. Conoce Python CHEVERE!!!!! YA SABES PYTHON Ahora hagamoslo conversar con PostgreSQLEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 18/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  19. 19. Pl/Python Instalando: Debian, Ubuntu y otros: apt-get install postgresql-plpython-9.1 Centos, Redhat, Fedora y otros: yum installEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 19/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  20. 20. Pl/Python Instalamos el Pl/Python: sudo apt­get install postgresql­plpython­9.1 Creamos una DB parta trabajar: createdb dbpython0 ­U USER_ADMIN_NAME Instalamos el lenguaje en la DB: createlang plpythonu python0 ­U USER_ADMIN_NAMEEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 20/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  21. 21. Pl/Python Instalamos el Pl/Python: sudo apt­get install postgresql­plpython­9.1 Creamos una DB parta trabajar: createdb dbpython0 ­U USER_ADMIN_NAME Instalamos el lenguaje en la DB: createlang plpythonu python0 ­U USER_ADMIN_NAMEEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 21/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  22. 22. Pl/Python Ahora a probarlo, en un editor de texto escriba esto y lo grabamos como “ejemplo1.plpy” : CREATE FUNCTION py_fecha ()   RETURNS integer AS $$   import os   os.system("date >> /[RUTA]/fecha.txt")   return 1 $$ LANGUAGE plpythonu; Creamos en /[RUTA] el file “fecha.txt” con: touch fecha.txt Chmod 777 fecha.txt   <­­ le damos todos los accesosEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 22/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  23. 23. Pl/Python Importamos nuestro script en la db: [root@hostname]psql python0 ­U USER_NAME python0=#i /[RUTA]/ejemplo1.plpy Ejecutar la función creada: python0=# select py_fecha();  py_fecha  ­­­­­­­­­­         1 Verificamos que paso (en consola): [root@hostname]cat /[ruta]/fecha.txtEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 23/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  24. 24. Pl/Python Vamos a enviar un email. Para ciertas funciones necesitamos instalar algunas librerias adicionales de Python, en este caso usaremos una llamada “smtplib” que ya viene instalada por defecto. Vamos a instalar un servidor de correos simple:     sudo apt­get install exim4 El log del server podemos verlo así:     sudo tail ­f /var/log/exim4/mainlogEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 24/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  25. 25. Pl/Python Esta es nuestra función para enviar e­mails: CREATE FUNCTION py_mail ()   RETURNS integer AS $$   import smtplib   to="el_que_recibe@mail.com"   sender="el_que_envia@mail.com"   smtpserver = smtplib.SMTP("localhost")   smtpserver.ehlo()   smtpserver.ehlo   header = To: + to + n + From: + sender + n + Subject:testn   msg = header + n Mensaje de prueba nn   smtpserver.sendmail(sender, to, msg)   smtpserver.close()   return 1 $$ LANGUAGE plpythonu;EQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 25/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  26. 26. Pl/Python Ejecutamos la función y verificamos el log del EXIM4 para ver si llego el email. Algo así se verá: 2012-10-10 23:00:25 1TM9wf-0004nf-0o <= el_que_envia@mail.com H=localhost ([127.0.1.1]) [127.0.0.1] P=esmtp S=381 2012-10-10 23:00:25 1TM9wf-0004nf-0o ** el_que_recibe@mail.com R=nonlocal: Mailing to remote domains not supported 2012-10-10 23:00:25 1TM9wf-0004nh-In <= <> R=1TM9wf-0004nf-0o U=Debian-exim P=local S=1201 2012-10-10 23:00:25 1TM9wf-0004nf-0o Completed 2012-10-10 23:00:25 1TM9wf-0004nh-In ** el_que_envia@mail.com R=nonlocal: Mailing to remote domains not supported 2012-10-10 23:00:25 1TM9wf-0004nh-In Frozen (delivery error message)EQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 26/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  27. 27. Pl/Python Ahora vamos a manipular datos. Pl/Python requiere instalar la libreria de PostgreSQL para Python (¿primer choque emocional?)   sudo apt­get install python­pygresql Vamos a crear una tablita:   python0=# create table datos( numero int, texto char(10));   CREATE TABLE   python0=# insert into datos values (1,A), (2,B), (3,C);   INSERT 0 3EQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 27/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  28. 28. Pl/Python Escribimos el siguiente script: CREATE FUNCTION py_data ( registro integer, valor char)   RETURNS integer AS $$   import pg   dbPG= pg.connect(dbname=python0,user=dbadmin,passwd=dbadmin,host=localhost)   qry = "update datos set texto = " + valor + " where numero = " + str(registro)   resultado = dbPG.query(qry)   return 1 $$ LANGUAGE plpythonu;EQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 28/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  29. 29. Pl/Python Lo subimos y los ejecutamos: python0=# i /home/ernesto/plpython/ejemplo3.py CREATE FUNCTION python0=# select py_data(1,BB);  py_data  ­­­­­­­­­        1 python0=# select * from datos;  numero |   texto     ­­­­­­­­+­­­­­­­­­­­­       2 | B                3 | C                1 | BB        EQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 29/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  30. 30. Pl/Python ESO ES TODO GRACIASEQ Soft Consultoría y Soporte E.I.R.L. Pl/PythonHttp://www.eqsoft.net 30/30informes@eqsoft.netTeléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

×