Your SlideShare is downloading. ×
0
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Programación en Pl/Python
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Programación en Pl/Python

1,872

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,872
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
56
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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. ¿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. ¿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. ¿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. ¿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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×