Programando con Pl/Python




                                                 Ernesto Quiñones Azcárate
                                                        ernesto@eqsoft.net


EQ Soft Consultoría y Soporte E.I.R.L.                                Pl/Python
Http://www.eqsoft.net                                                       1/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
¿Que es Pl/Python?




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

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

EQ Soft Consultoría y Soporte E.I.R.L.                                        Pl/Python
Http://www.eqsoft.net                                                               2/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
¿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/Python
Http://www.eqsoft.net                                                   3/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
¿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/Python
Http://www.eqsoft.net                                                   4/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
¿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/Python
Http://www.eqsoft.net                                                   5/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Conoce Python




EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                   6/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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/Python
Http://www.eqsoft.net                                                   7/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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/Python
Http://www.eqsoft.net                                                   8/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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/Python
Http://www.eqsoft.net                                                   9/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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 valor


EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 10/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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/Python
Http://www.eqsoft.net                                                 11/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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 cadena
EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 12/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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 cadena

EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 13/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Conoce Python
   Estructuras de control – WHILE:

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




EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 14/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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                  diccionario




EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 15/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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
                                        enteros


EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 16/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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/Python
Http://www.eqsoft.net                                                 17/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Conoce Python

                                  CHEVERE!!!!!

                           YA SABES PYTHON


          Ahora hagamoslo conversar con
                   PostgreSQL


EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 18/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Pl/Python

                                   Instalando:

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

          Centos, Redhat, Fedora y otros:
                                      yum install




EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 19/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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_NAME




EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 20/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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_NAME




EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 21/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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 accesos


EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 22/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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.txt



EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 23/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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/mainlog



EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 24/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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/Python
Http://www.eqsoft.net                                                    25/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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/Python
Http://www.eqsoft.net                                                   26/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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 3




EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 27/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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/Python
Http://www.eqsoft.net                                                              28/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
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/Python
Http://www.eqsoft.net                                                 29/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
Pl/Python



                  ESO ES TODO

                              GRACIAS

EQ Soft Consultoría y Soporte E.I.R.L.                            Pl/Python
Http://www.eqsoft.net                                                 30/30
informes@eqsoft.net
Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957

Programación en Pl/Python

  • 1.
    Programando con Pl/Python Ernesto Quiñones Azcárate ernesto@eqsoft.net EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 1/30 informes@eqsoft.net Telé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.html EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 2/30 informes@eqsoft.net Telé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/Python Http://www.eqsoft.net 3/30 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 4.
    ¿Que no desdeesperar 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/Python Http://www.eqsoft.net 4/30 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 5.
    ¿En que casosusar 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/Python Http://www.eqsoft.net 5/30 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 6.
    Conoce Python EQ SoftConsultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 6/30 informes@eqsoft.net Telé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/Python Http://www.eqsoft.net 7/30 informes@eqsoft.net Telé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/Python Http://www.eqsoft.net 8/30 informes@eqsoft.net Telé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/Python Http://www.eqsoft.net 9/30 informes@eqsoft.net Telé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 valor EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 10/30 informes@eqsoft.net Telé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/Python Http://www.eqsoft.net 11/30 informes@eqsoft.net Telé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 cadena EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 12/30 informes@eqsoft.net Telé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 cadena EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 13/30 informes@eqsoft.net Telé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 Y EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 14/30 informes@eqsoft.net Telé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                  diccionario EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 15/30 informes@eqsoft.net Telé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                                      enteros EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 16/30 informes@eqsoft.net Telé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/Python Http://www.eqsoft.net 17/30 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 18.
    Conoce Python CHEVERE!!!!! YA SABES PYTHON Ahora hagamoslo conversar con PostgreSQL EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 18/30 informes@eqsoft.net Telé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 install EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 19/30 informes@eqsoft.net Telé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_NAME EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 20/30 informes@eqsoft.net Telé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_NAME EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 21/30 informes@eqsoft.net Telé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 accesos EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 22/30 informes@eqsoft.net Telé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.txt EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 23/30 informes@eqsoft.net Telé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/mainlog EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 24/30 informes@eqsoft.net Telé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/Python Http://www.eqsoft.net 25/30 informes@eqsoft.net Telé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/Python Http://www.eqsoft.net 26/30 informes@eqsoft.net Telé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 3 EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 27/30 informes@eqsoft.net Telé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/Python Http://www.eqsoft.net 28/30 informes@eqsoft.net Telé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/Python Http://www.eqsoft.net 29/30 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957
  • 30.
    Pl/Python ESO ES TODO GRACIAS EQ Soft Consultoría y Soporte E.I.R.L. Pl/Python Http://www.eqsoft.net 30/30 informes@eqsoft.net Teléfonos: (51) 01–5645744 / 01-5645424 / 997244926 / 997003957