30
EQ Soft Consultoría y Soporte E.I.R.L. Http://www.eqsoft.net [email protected] Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957 Programando con Pl/Python Programando con Pl/Python Ernesto Quiñones Azcárate Ernesto Quiñones Azcárate [email protected] [email protected] Pl/Python 1/30

Programación en Pl/Python

Embed Size (px)

Citation preview

Page 1: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Programando con Pl/PythonProgramando con Pl/Python

Ernesto Quiñones AzcárateErnesto Quiñones Azcá[email protected]@eqsoft.net

Pl/Python 1/30

Page 2: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

¿Que es Pl/Python?¿Que es Pl/Python?

http://www.postgresql.org http://www.python.org

http://www.postgresql.org/docs/9.2/static/plpython.html

Pl/Python 2/30

Page 3: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

¿Que es Pl/Python?¿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.

Pl/Python 3/30

Page 4: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

¿Que no desde esperar de Pl/Python?¿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).

Pl/Python 4/30

Page 5: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 5/30

¿En que casos usar Pl/Python?¿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.

Page 6: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 6/30

Conoce PythonConoce Python

Page 7: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 7/30

Conoce PythonConoce 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”

Page 8: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 8/30

Conoce PythonConoce Python

(Los ... significan que debes presionar un “tab”)

a=3if a < 3:...print “es menor que 3”else:...print “es mayor o igual que 3”

presionar 2 veces “enter” en la ultima linmensaje:

Page 9: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 9/30

Conoce PythonConoce 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.

Page 10: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 10/30

Conoce PythonConoce PythonArreglos.

* 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 valor

Page 11: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 11/30

Conoce PythonConoce PythonArreglos.

* 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]

Page 12: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 12/30

Conoce PythonConoce PythonEl 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 cadena

Page 13: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 13/30

Conoce PythonConoce PythonSubcadena (el indice siempre empieza en 0):

a='hola mundo'print a[:5]   <­­ corta desde el inicio hasta la posición 5print a[:­5]  <­­ corta los últimos 5 caracteres de la cadenaprint 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 cadena

Page 14: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 14/30

Conoce PythonConoce PythonEstructuras de control – WHILE:

   X=10   Y=0   while Y < X:   ...Y += 1   ...print Y

Page 15: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 15/30

Conoce PythonConoce PythonEstructuras 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                  diccionario

Page 16: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 16/30

Conoce PythonConoce PythonEstructuras 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                                     enteros

Page 17: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 17/30

Conoce PythonConoce PythonEstructuras 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

 

Page 18: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 18/30

Conoce PythonConoce Python

CHEVERE!!!!!

YA SABES PYTHON

Ahora hagamoslo conversar con PostgreSQL

Page 19: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 19/30

Pl/PythonPl/Python

Instalando:

Debian, Ubuntu y otros:apt-get install postgresql-plpython-9.1

Centos, Redhat, Fedora y otros:yum install

Page 20: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 20/30

Pl/PythonPl/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_NAME

Page 21: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 21/30

Pl/PythonPl/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_NAME

Page 22: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 22/30

Pl/PythonPl/Python

Ahora a probarlo, en un editor de texto escriba esto y lo grabamos como “ejemplo1.plpy” :CREATE FUNCTION py_fecha ()  RETURNS integerAS $$  import os  os.system("date >> /[RUTA]/fecha.txt")  return 1$$ LANGUAGE plpythonu;

Creamos en /[RUTA] el file “fecha.txt” con:touch fecha.txtChmod 777 fecha.txt   <­­ le damos todos los accesos

Page 23: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 23/30

Pl/PythonPl/Python

Importamos nuestro script en la db:[root@hostname]psql python0 ­U USER_NAMEpython0=#\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.txt

Page 24: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 24/30

Pl/PythonPl/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/mainlog

Page 25: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 25/30

Pl/PythonPl/Python

Esta es nuestra función para enviar e­mails:

CREATE FUNCTION py_mail ()  RETURNS integerAS $$  import smtplib  to="[email protected]"  sender="[email protected]"  smtpserver = smtplib.SMTP("localhost")  smtpserver.ehlo()  smtpserver.ehlo  header = 'To:' + to + '\n' + 'From: '+ sender + '\n' + 'Subject:test\n'  msg = header + '\n Mensaje de prueba \n\n'  smtpserver.sendmail(sender, to, msg)  smtpserver.close()  return 1$$ LANGUAGE plpythonu;

Page 26: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 26/30

Pl/PythonPl/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 <= [email protected] H=localhost ([127.0.1.1]) [127.0.0.1] P=esmtp S=3812012-10-10 23:00:25 1TM9wf-0004nf-0o ** [email protected] R=nonlocal: Mailing to remote domains not supported2012-10-10 23:00:25 1TM9wf-0004nh-In <= <> R=1TM9wf-0004nf-0o U=Debian-exim P=local S=12012012-10-10 23:00:25 1TM9wf-0004nf-0o Completed2012-10-10 23:00:25 1TM9wf-0004nh-In ** [email protected] R=nonlocal: Mailing to remote domains not supported2012-10-10 23:00:25 1TM9wf-0004nh-In Frozen (delivery error message)

Page 27: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 27/30

Pl/PythonPl/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 3

Page 28: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 28/30

Pl/PythonPl/Python

Escribimos el siguiente script:

CREATE FUNCTION py_data ( registro integer, valor char)  RETURNS integerAS $$  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;

Page 29: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 29/30

Pl/PythonPl/Python

Lo subimos y los ejecutamos:

python0=# \i /home/ernesto/plpython/ejemplo3.pyCREATE FUNCTION

python0=# select py_data(1,'BB'); py_data ­­­­­­­­­       1

python0=# select * from datos; numero |   texto    ­­­­­­­­+­­­­­­­­­­­­      2 | B               3 | C               1 | BB        

Page 30: Programación en Pl/Python

EQ Soft Consultoría y Soporte E.I.R.L.Http://[email protected]éfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Pl/Python 30/30

Pl/PythonPl/Python

ESO ES TODO

GRACIAS