Curso python

Post on 13-Jun-2015

7.316 views 0 download

description

Diapositivas de un curso introductorio a programar en Python

Transcript of Curso python

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

Día 1:   1. Instalando Python (en Linux)   2. El entorno de consola   3. Variables y constantesDía 2:   4. Trabajo con tipos de datos   5. Trabajo con cadenas   6. Estructuras de controlDía 3:   7. Manejos de errores   8. FuncionesDía 4:   9. Objetos   10. Conexiones a base de datos, Objetos de Mysql y PgsqlDía 5:   11. Librería de sistema operativo y tiempo   12. Creando librerías y parámetros entre scripts

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

1. Instalando Python (en Linux)

Python en Linux es muy fácil de instalar, de echo es prácticamente la base de tantas herramientas de software libre que generalmente ya viene por defecto.

Porque los programadores prefieren usar Python?

a. Te obliga a programar mas limpio que lenguajes como PHPb. Su engine es mas ligero que el de PHP o Javac. Es multiplataformad. Soporte para programar scripts, gui apps y web appse. Altamente escalablef. Es SIMPLE

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

1. Instalando Python (en Linux)

Plataformas RPM (redhat, centOS, Fedora)

yum install python

Plataformas DEB (Debian, Knoppix, Ubuntu en todas sus variantes)

apt­get  install python

OjO: van a encontrar varias ramas de Python como la 2.4, 2.5, 2.6, 2.8, 3.0; la rama 2.x es la mas usada y con mayor desarrollo por el momento, la 3.0 podría no tener todo lo que necesitas.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

1. Instalando Python (en Linux)

Instalar Python con los comandos anteriormente mencionados solo instala el “engine” base, python cuenta con una gran variedad de librerías para diferentes funciones y cada una de estas con sus propias dependencias, por ejemplo:

Si deseamos instalar las librerías de conexión a PostgreSQL debemos primero instalar python, luego instalar una de las librerías de conexión a Postgresql como esto :

apt­get install python­pgsql

Esto instalará primero el cliente de C de Postgresql y todas sus dependencias y luego al final la librería python­pgsql.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

1. Instalando Python (en Linux)

Luego de instalado al ejecutar “python” en la consola tenemos algo como esto :

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

2. El entorno de la consola

El entorno de la consola nos permite “aprender” Python de una manera mas sencilla, se puede probar funcionalidades sencillas y sintaxis del lenguaje.

Comandos básicos:

print “hola mundo”    <­­ imprime algo en la consolaA = 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”

Se puede hacer mas?

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

2. El entorno de la consola

(Los ... significan 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 linea y la consola soltara este mensaje:

es mayor o igual que 3

Escribir sentencias complejas en la consola es complicado, un error de sintaxis hace volver a escribir toda la sentencia, esto es muy incómodo.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

2. El entorno de la consola

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.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

3. Variables y constantes

Python maneja varios tipos de datos, el tipo corresponde al tipo de dato con el cual se inicializa la variable.

Tipos soportados:

Cadenas (strings)EnterosPunto FlotanteBoolean

Comparar los resultados:

A=10                               A=10.0print A/3                         print A/3

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

3. Variables y constantes

Existe un tipo “null” que en Python se conoce como “none”.

G=Noneif G is None:..print “G es nulo”else:...print “G tiene algo:

La respuesta es :G es Nulo

Los tipos boolean se asignan así:

a=True                 <­­­­tome en cuenta la primera letra en mayúsculab=False

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

3. Variables y constantes

Arreglos.En Python el concepto de Arreglo es mucho mas especializado.

* La “lista”, es un conjunto de datos ingresados en una estructura única, no necesitan ser del mismo tipo (el índice empieza en 0):

A=[1,4,6,'apesol']for valor in A:...print valor

El resultado es :Elemento 0: 1Elemento 1: 4Elemento 2: 6Elemento 3: apesol

Practica : escribir “print A[­3]”

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

3. Variables y constantes

Arreglos.

* La “lista”, incorpora el método “insert” para añadir mas elementos, el método “append” añade un valor adicional inmediatamente al final de la lista y el comando “del” elimina elementos de la lista de una posición determinada.

A.insert(4,'chicha')

del A[2]

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

3. Variables y constantes

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',4for valor in A:...print valor

Los elementos entre paréntesis denotan una tupla dentro de otra, este principio se cumple en la “lista”.

A='a',2,'c',4,('e',6)for valor in A:...print valor

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

3. Variables y constantes

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':'hola mundo',3:122}print Arreglo['b']

ahora veamos que obtenemos con esto:for c in Arreglo:...print c

Y ahora así:for c in Arreglo:...print Arreglo[c]

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

3. Variables y constantes

Arreglos.

­ La función “len()” permite obtener la cantidad de elementos dentro de una lista, tupla o diccionario.­ El comando “del” permite eliminar un elemento en el diccionario haciendo mención al mismo y su índice.­ Para insertar un elemento en un arreglo simplemente haga mención del mismo y coloque un nuevo nombre de índice (numero o texto)­ Podemos crear listas de diccionarios:

a=({1:12,2:13},{1:21,2:23})for c in a:...print c...for d in c:......print c[d]

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

4. Trabajo con Tipos de Datos

* Type, permite ver el tipo de datos de una variable

x=10                 x=122332423423434     x='abc'type(x)             type(x)                           type(x)

x=10.0              x=None                         x=(1,2,3)              x={1:10,2:20,3:30}type(x)             type(x)                          type(x)                 type(x)

* Int y float, convierte un float a un entero y de entero a float, puede usarse con cadenas de texto pero que no tengan literalesx=10.0                                     x=10print x/3                                 print x/3print int(x)/3                          print float(x)/3

* Operadores  +=, ­=, *=,  /= para suma, resta, multiplicación y división rápida con el valor ya almacenado

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

4. Trabajo con Tipos de Datos

* %, el modulo en las divisiones enteras* //, para la división entera

print 9 % 2  print 9 // 2

* str, transforma cualquier objeto/variable a cadena de caracteres

x=12print str(x)+'<­­el numero'

* bool, permite transformar una variable a booleano, no muy práctico.

X=12                      x=0                             x='abc'                 x=''           x=Noneprint bool(x)         print bool(x)              print bool(x)        print(x)     print(x)

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

5. Trabajo con Cadenas

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ígitoprint a[5:10]       <­ una sección de cadena, como “substr”print a[5:]           <­ desde la posición 5 hasta el final de la cadena

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

5. Trabajo con Cadenas

Subcadena (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=12Y=11A=”el  valor de X es: %d y de Y es:%d” % (X,Y)print A

Len, retorna la cantidad de caracteres de una cadena

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

5. Trabajo con Cadenas

Una cadena es un objeto que tiene varios métodos asociados a ella misma tales como :

x = 'Hola, MunDO'x.title()                             <­­­ primera letra de cada palabra en mayúsculax.upper()                         <­­­ toda la cadena en mayúsculax.lower()                          <­­­ toda la cadena en minúsculasx.capitalize()                   <­­­ primera letra de la cadena en mayúsculax.count('a')                      <­­­ cuenta la cantidad de 'a' en la cadenax.find('a,')                        <­­­ ubica la posición de la cadena del texto                                               ingresadox.replace('a','4')               <­­­ reemplaza las 'a' por '4'x.split(x)                          <­­­ corta la cadena en una lista, cada palabra                                                es un elemento de la lista

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

5. Trabajo con Cadenas

Caracteres especiales como comillas y dobles comillas deben usar el caracter “\” por delante.

a=”y San Martin dijo \”Viva el Peru\””print a

Para repetir cadenas, multipliquela por la cantidad de veces requerida

A='cuy'*5print A

No se puede cambiar el valor de un caracter de una cadena

A=”cuy”A[2]='i'     <­­­ da un error

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

6. Estructuras de Control

Operadores de comparacion:

==   <­­­ igual<>   <­­­ diferente

Operadores logicos:

andornot

A=1B=1if not a <> b:...print “A no es diferente de B”

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

6. Estructuras de Control

IF

if a == b:...print “a y b son iguales”elif a > b:...print “a es mayor que b”else...print “a y b son diferentes”

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

6. Estructuras de Control

WHILE

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

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

6. Estructuras de Control

FOR, tiene muchas formas de usarse

En un rango de números :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 diccionario..print a

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

6. Estructuras de Control

FOR, tiene muchas formas de usarse

En un rango de números :for a in range(1,10,2):       <­­­ejecuta del 1 al 9 saltando de 2 en 2...print a

for a in range(10,1,­3):        <­­­ejecuta del 10 al 1 saltando de 3 en 3...print a

for a,b in ((1,4),(2,5),(3,6)):    <­­­ solo se acepta valores numéricos enteros...print a...print b

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

6. 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

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

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

7. Manejo de errores

El comando “try” permite capturar la posibilidad de que se procese un error en la ejecución del siguiente comando para que el Python no nos bote del programa.

try:...a='abc'+123except:...print “hay un error”

El “except” responde a diferentes valores dependiendo el comando a ejecutar, por ejemplo las librerías de PostgreSQL tienen diferentes “except” dependiendo el tipo de error.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

7. Manejo de errores

try:...a='abc'+123except:...pass                                          <­­­ “pass” no hace nadaprint “se comio el error”

Esta sentencia da error el código debe continuar debajo del nivel del “try”

try:...a='abc'+123...print “aqui debe continuar el programa”except:...pass                                          

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

7. Manejo de errores

try:...a='abc'+123except:...pass                                          <­­­ “pass” no hace nadaprint “se comio el error”

Esta sentencia da error el código debe continuar debajo del nivel del “try” en el editor de consola, ejecutando un archivo “.py” no sucede error y se continua con la ejecución del programa.

try:...a='abc'+123...print “aqui debe continuar el programa si estoy en consola”except:...pass                                          

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

7. Manejo de errores

try:...a='abc'+123except:...raise  ('mensajito')    <­­­ permite ver todo el traceback del error                                            corta el programa y permite enviar un mensaje                                            final personalizado

Existen varios tipos de “except” para el uso común del lenguaje estos son los mas conocidos:

except RuntimeError:print “error en el sistema”

except TypeError:print “error de tipo de datos, como el que estamos generando”

except NameError:print “cuando se usa un nombre de variable/objeto que no existe”

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

7. Manejo de errores

Ejemplo para explicar:

import sys                                                                <­­ importa una libreríatry:    f = open('myfile.txt')    s = f.readline()    i = int(s.strip())except IOError as err:                                             <­­ tipo de except especial de la    print("I/O error: {0}".format(err))                             libreria sys si no Open(myfile.txt”) except ValueError:                                                  <­­ se ejecuta cuando int() no puede         print("Could not convert data to an integer.")      convertir el valor a enteroexcept:                                                                     <­­ error generico    print("Unexpected error:", sys.exc_info()[0])    raise

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

8. Funciones (Usar editor de texto)

def mi_funcion (mi_parametro):...sentencias

Ejemplo:

def mi_raizcuadrada( pNumero):...return (pNumero * pNumero)

print mi_raizcuadrada(4)print mi_raizcuadrada(mi_raizcuadrada(4))

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

8. Funciones (Usar editor de texto)

Para asignar valores por defecto a los parametros:

def mi_raizcuadrada( pNumero=9):...return (pNumero * pNumero)

print mi_raizcuadrada(4)print mi_raizcuadrada()

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

8. Funciones (Usar editor de texto)

def mi_funcion (mi_parametro):...sentencias

Ejemplo:

def mi_raizcuadrada( pNumero):...return (pNumero * pNumero)

print mi_raizcuadrada(4)print mi_raizcuadrada(mi_raizcuadrada(4))

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

8. Funciones (Usar editor de texto)

Es posible invocar solo ciertos parámetros de una función

def mifuncion (a=1, b=2):...return a+b

print mifuncion(2,3)print mifuncion()print mifuncion(b=3)

Pero si los valores no invocados explícitamente no tiene valor por defecto el Python devolverá un error.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

8. Funciones (Usar editor de texto)

Es posible pasar mas parámetros de los esperados que se reciben en una lista o en un diccionario

def mifuncion( parametro, *arguments, **keywords):print parametrofor parametrosadicionales in arguments:

print “valor:”+parametrosadicionalesfor indice in keywords:

print “indice:”+indiceprint “valor:”+keywords[indice]

return

mifuncion('a','b','c','d', uno='uno', dos=2, tres='tres')

OjO no se puede usar de indice un número

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

8. Funciones (Usar editor de texto)

Las funciones pueden tener funciones anidadas

def anidado1(argumento1):...def anidado2(argumento2):......return argumento1 +argumento2...return anidado2...f = anidado1(5)  <­­­ en este momento no opera nada, solo genera una f(3)                             función en memoriaf(4)

d = anidado2(6)      <­­ esto da errorprint anidado1(5)   <­­ esto da un mensaje de sistema

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

8. Funciones (Usar editor de texto)

Los parámetros en la función solo están activos dentro de la misma función, lo declarado fuera de la función puede ser invocado como “global” y modificado si fuera necesario.

A=6def valor():..global A..print “el valor es : “ + str(A)..A += 10..return

valor()print “el valor es:” + str(A)

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

8. Funciones (Usar editor de texto)

Las funciones pueden simular retornar varios valores

def mifuncion(a,b):return a * 2, b  * 3

c ,d = mifuncion(4,5)print cprint d

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

8. Funciones (Usar editor de texto)

Los parámetros vistos hasta el momento son por “referencia”, solo algunos tipos de datos pueden ser pasados por “valor”, por ejemplo el integer o el float son inmutables, pero las listas no.

def mifuncion( inmutable,mutable):inmutable = inmutable + 1mutable.append(inmutable)

a=15b=[15]mifuncion(a,b)print aprint b

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

9. Objetos

En su forma mas básica podemos declarar clases en Python de esta forma:

class MiClase:...atributo1=123...atributo2='abc'

...def metodo1(self):

......print “atributo : “ + str(self.atributo1) + “ “ + self.atributo2

obj=MiClase()obj.metodo1()

“self” es una palabra reservada y es un equivalente a “this” en otros lenguajes.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

9. Objetos

En su forma mas básica podemos declarar clases en Python de esta forma:

class MiClase:...atributo1=123...atributo2='abc'

...def metodo2(self, valor):

......print atributo1+valor

obj=MiClase()obj.metodo2(4)

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

9. Objetos

Constructor de clases usar “__init__”

class MiClase2:...atributo1 = 12...atributo3 = [1,'b',3]...def __init__(self, parametro1, parametro2):  <­­”self” se debe declarar en......if parametro1 <> None:                                     todos los métodos.........self.atributo1 = parametro1......self.atributo2 = parametro2

obj=MiClase2(None,2)print obj.atributo1print obj.atributo2print obj.atributo3obj2=MiClase2(44,2)print obj2.atributo1

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

9. Objetos

Para algunos casos especiales podemos desear convertir un objeto entero a una cadena de caracteres, esto se hacer con “__str__”

class MiClase:...def __str__(self)......return “me converti en cadena”

obj=MiClase()print obj

También es posible implementar el método “__repr__” para obtener un efecto similar pero con un texto formateado.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

9. Objetos

Los objetos en Python permiten crear mas atributos de los definidos en la clase, de manera indiscriminada lastimosamente:

obj=MiClase()obj.atributoquenoexiste = 1print obj.atributoquenoexiste

Sin embargo podemos setear que esto no suceda con el método “__setattr__”

class miClase:...atributo1 = 123...def __setattr__(self,nombre, valor):......print “no me puedes cambiar, el parametro anadido es:” + nombre + “ y el valor es:” + repr(valor)

obj=miClase()obj.atributoquenoexiste = 1

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

9. Objetos

Para el caso de que deseemos advertir sobre el hacer “get” a un atributo que no existe usamos el método “__getattr__”

class miClase5:...atributo1 = 123...def __getattr__(self,name):......print "lo siento, no existe atributo: " + name

obj = miClase5()print “valor:” + obj.atributo12

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

9. Objetos

Para borrar atributos añadidos al objetos usar “del”:

class miClase5:...atributo1 = 123...def __getattr__(self,name):......print "lo siento no existe tributo : " + name

obj = miClase5()obj.atributo12=1234print "voy a borrar el atributo con el valor:" + str(obj.atributo12)del obj.atributo12x = obj.atributo12

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

9. Objetos

Para evitar que se borren atributos añadidos al objeto

class miClase5:...atributo1 = 123..def __delattr__(self,name):......print "no se puede borrar a tributo: "+ name

obj = miClase5()obj.atributo12=1print "voy a borrar:" + str(obj.atributo12)del obj.atributo12print “sigo aqui: “ + str(obj.atributo12)

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

9. Objetos

Para declarar “set” y “get” a los atributos se debe operar como en este ejemplo.

class miClase6(object):...def __init__(self):                      ......self.__valor = 12                                <­­­ aquí acabo de declarar un atributo...def getValor(self):                                       privado al usar “__” delante del nombre......print "Leyendo numero del get".....return self.__valor...def setValor(self, valor):......print "Grabando el valor en el set"......self.__valor = valor...valor = property(getValor,setValor)

obj = miClase6()print obj.valorobj.valor=8print obj.valorprint obj__valor    <­­­ va a dar un error

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

9. Objetos

Herencia, para declararla hay que decir que la clase implementa otra clase.

class Uno:...numero1 = 1...def imprime1(self):......print "estoy en la clase 1"

class Dos(Uno):...numero2 = 2...def imprime2(self):......print "estoy en la clase 2"......Uno.imprime1(self)...def imprime3(self):......print "estoy en la clase 2, no invoco nada de la clase 1"

a = Dos()a.imprime2()a.imprime1()a.imprime3()print a.numero1print a.numero2

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

Para conectarse a las bases de datos Python utiliza diversas librerías especializadas para ello, es común que incluso para una misma base de datos exista mas de una alternativa de librería como en el caso de MySQL.

Usaremos en estas distribuciones desde repositorios:

centOS: MySQL­pythonUbuntu: python­mysqldbhttp://www.mikusa.com/python­mysql­docs/

centOS: postgresql­pythonUbuntu: python­pgsqlhttp://www.pygresql.org/pg.html

En ambos casos son las mismas pero se llaman diferente los paquetes dependiendo la distribución de Linux que se use

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

MySQL

import MySQLdbtry:

dbMY = MySQLdb.connect(host='localhost',user='root',passwd='clave',db='operador')except MySQLdb.Error:

print “La clase MySQLdb encontro un error”except:

print “no me pude conectar a la db, error desconocido”

MySQLdb incluye su propio “except”.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

MySQL

import MySQLdbtry:

dbMY = MySQLdb.connect(host='localhost',user='root',passwd='clave',db='operador')except MySQLdb.Error, error:

print “error exacto:”print error

except:print “no me pude conectar a la db, error desconocido”

en este caso “error” es una lista de 2 elementos con el error exacto, el número y el mensaje

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

MySQL

import MySQLdbdbMY = MySQLdb.connect(host='localhost',user='root',passwd='clave',db='operador')

qry=”select * from agentes”

cursor=dbMY.cursor()       <­­­ antes de ejecutar un query es necesario declarar un cursorcursor.execute(qry)print cursor                        <­­­ esto solo nos devuelve la dirección de memoria del cursos

setdata = cursor.fetchall() <­­­ bajamos la data del cursor a un contenedor de los datos,                                                    es una lista de listasprint setdata

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

MySQL

import MySQLdbdbMY = MySQLdb.connect(host='localhost',user='root',passwd='clave',db='operador')qry=”select * from agentes”cursor=dbMY.cursor()       cursor.execute(qry)setdata = cursor.fetchall() 

for registro in setdata:                                                       <­­­ así podemos obtener la datafor campo in registro:

print campoprint “***************fin registro***************”

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

MySQL

import MySQLdbdbMY = MySQLdb.connect(host='localhost',user='root',passwd='clave',db='operador')qry=”select * from agentesXXXYYY”cursor=dbMY.cursor()       try:

cursor.execute(qry)except MySQLdb.Error, error:

print “error exacto:”print error

except:print “error desconocido en el query”

setdata = cursor.fetchall()                                               <­­­ si se da un error esto dará otro for registro in setdata:                                                           error

for campo in registro:print campo

print “***************fin registro***************”

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

MySQL

import MySQLdbdbMY = MySQLdb.connect(host='localhost',user='root',passwd='clave',db='operador')qry=”select * from agentesXXXYYY”cursor=dbMY.cursor()       try:

cursor.execute(qry)setdata = cursor.fetchall() otro                                         <­­­ ponerlo aquí es una manerafor registro in setdata:                                                             de resolver el problema

for campo in registro:print campo

print “***************fin registro***************”except MySQLdb.Error, error:

print “error exacto:”print error

except:print “error desconocido en el query”

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

MySQL

import MySQLdbdbMY = MySQLdb.connect(host='localhost',user='root',passwd='clave',db='operador')

qry=”select * from agentes”cursor=dbMY.cursor()       

rows=cursor.execute(qry)                           <­­­ esto devuelve la cantidad de registrosprint “existen %d registros” % rows

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

MySQL

import MySQLdbdbMY = MySQLdb.connect(host='localhost',user='root',passwd='clave',db='operador')

qry=”select * from agentes”cursor=dbMY.cursor()       rows=cursor.execute(qry)                           

for a in range(1,rows):c = cursor.fetchone()                                                   <­­­ así podemos pedir los registrosprint c                                                                                  uno por unoprint “Fin registro %d ************************” % a

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

MySQL

import MySQLdbdbMY = MySQLdb.connect(host='localhost',user='root',passwd='clave',db='operador')

qry=”select * from agentes”cursor=dbMY.cursor()       rows=cursor.execute(qry)                           

cursor.close()           <­­­ cerramos el cursor, liberamos memoria

dbMY.close()            <­­­­ cerramos la conexión a la db, nunca dejar de hacerlo.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

PostgreSQL

import pg

try:    dbPG = pg.connect(dbname='oeprador',user='usuario',passwd='clave',host='localhost')except TypeError, error:    print "argumentos mal pasado, o demasiado"    print errorexcept SyntaxError, error:    print "argumento duplicado"

print errorexcept pg.InternalError, error:    print "se conecto al motor pero este responde negativo a la conexion"    print error

En el caso de la librería de PostgreSQL la mayoría de los métodos del objeto incluyen sus propias excepciones, por ello se hace necesario consultar la documentación, el parámetro “error” esta recibiendo el mensaje especifico del error.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

PostgreSQL

import pgdbPG = pg.connect(dbname='oeprador',user='usuario',passwd='clave',host='localhost')

qry = "insert into tabla values (1,2,3)"try:

resultado = dbPG.query(qry)except TypeError,error:

print "Query mal formado"print error

except pg.ProgrammingError,error:print “Error producido por la data en si y no de formacion de query”print error

Existe ademas:­ ValueError: empty SQL query or lost connection­ pg.InternalError: error during query processing

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

PostgreSQL

import pgdbPG = pg.connect(dbname='oeprador',user='usuario',passwd='clave',host='localhost')

qry = "select * from tabla"resultado = dbPG.query(qry)

setdata = resultado.getresult()          <­­­ esto retorna la data como una tuplaprint setdata

print “**************************”

setdata2 = resultado.dictresult()      <­­­ esto retorna la data como un diccionarioprint setdata

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

PostgreSQL

import pgdbPG = pg.connect(dbname='oeprador',user='usuario',passwd='clave',host='localhost')

qry = "select * from tabla"resultado = dbPG.query(qry)

setdata = resultado.dictresult()      

for c in setdata:for d in c:

print d + ":" + str(c[d])print "**********fin registro"

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

10. conexiones a Base de datos

PostgreSQL

Algunas cosas interesantes.

qry = "select * from tabla"resultado = dbPG.query(qry)print resultado.listfileds()     <­­­ devuelve los nombres de los campos de la consulta

print resultado.ntuples()       <­­­ cantidad de registros que devolvió la consulta

dbPG.close()                          <­­­ nunca olvidar cerrar la conexión

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

11. Librería de sistema operativo y tiempo

La librería de sistema operativo nos permite interactuar entre el Python y el OS directamente.

Podemos mandar comandos de consola completos al OS.

import osos.system('ls')

La salida del comando la podemos ver en la consola al ejecutar el script pero no podemos capturarla.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

11. Librería de sistema operativo y tiempo

os.getcwd()      <­­­ retorna en que directorio estoy

os.chdir('/var/log')  <­­­ se mueve a otro directorio

Desde la consola Python podemos utilizar 2 comandos muy importantes para ver las funciones que nos ofrece la librería:

>>> dir(os)      <­­­­­ muestra los métodos de la librería

>>>help(os)   <­­­­­ es una ayuda en linea de la librería

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

11. Librería de sistema operativo y tiempo

La librería de tiempo nos permite trabajar con fechas y horas, para usarla:

import time

print time.asctime()         <­­ devuelve una cadena con la fecha y hora.

print time.ctime()             <­­ sin parámetro devuelve la fecha actual en cadena.

print time.ctime(12345)   <­­ especificando una cantidad de segundos devuelve la                                               fecha transcurrida desde el “tiempo local” del 31dic de                                              1969.

print time.localtime()       <­­ devuelve la fecha y hora actual en formato numérico                                                 en una lista. 

print time.sleep(60)        <­­ suspende la ejecución de un código durante el número                                               de segundos especificado.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

11. Librería de sistema operativo y tiempo

La librería de tiempo nos permite trabajar con fechas y horas, para usarla:

import time

x =  time.strptime('2009­08­09','%Y­%m­%M')  <­­­ transforma una cadena a fecha (enprint x                                                                         una lista).

x =  time.strftime('%Y­%m­%M',x)                    <­­­ transforma una fecha a cadena enprint x                                                                         el formato especificado.

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

11. Librería de sistema operativo y tiempo

La librería de tiempo nos permite trabajar con fechas y horas, para usarla:

import time

segundosX = 0

#obtienel a hora actual en segundossegundos = int(time.time())print "hora actual:" + time.ctime(segundos)

segundosX = segundos + 60suma=time.ctime(segundosX)print "mas 1 minuto:" + suma

segundosX = segundos +  3600suma=time.ctime(segundosX)print "mas 1 hora:" + suma

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

11. Librería de sistema operativo y tiempo

Existe una librería alterna que es la datetime, esta nos ayuda en operaciones con fechas.

from datetime import date

fecha1=date.today()        <­­­ devuelve el día actual

fecha2=date(2009,12,4)   <­­­ transforma un YYYY,MM,DD en enteros a fecha

x= fecha2 – fecha1         <­­­ la operación entre fechas devuelve un tipo de datoprint x                                    “timedelta”, OjO no podemos sumar fecha.print x.daysprint x.secondsprint x.microseconds

Solo los 3 tipos de resultados son almacenados, para convertir a hora o minutos hay que operar con los “days” o los “seconds”

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

11. Librería de sistema operativo y tiempo

Para restar o sumar días:

from datetime import datefrom datetime import datetime

hoy = date.today()

nuevafecha = hoy + timedelta(365)       <­­­ especificamos los diasprint nuevafecha

nuevafecha = hoy ­ timedelta(365)       print nuevafecha

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

12. Creando librerías y parámetros entre scripts

Creando tu propia librería

Crear un archivo de texto con la extensión “.py”

touch mate.py

Escribir en este archivo las funciones que se desean programar

def suma(a,b):return a+b

En el archivo con el código que se desea importar colocar

import mate                  <­­­ debe tener el mismo nombre del archivo físico

print mate.suma(8,4)   <­­­ especificar el nombre de la librería delante de la                                                    función

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

12. Creando librerías y parámetros entre scripts

Creando tu propia librería

La librería puede tener incluidas clases (editar mate.py y añadir) 

class clsMate:X = 0Y = 0def divide(self)

return X/Y

En el archivo con el código que se desea importar colocar

obj = mate.clsMate()obj.X = 10obj.Y = 5print obj.divide()

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

12. Creando librerías y parámetros entre scripts

Creando tu propia librería

Se pueden importar solo ciertas funciones o clases de la librería

from mate import suma,clsMate

print suma(5,7)     <­­­ en este caso ya no es necesario hacer precisión de la obj = clsMate()            libreríaobj.X=10obj.Y=5print obj.divie()

print mate.multiplica(6,9)  <­­­ esto da error porque no se importoprint multiplica(6,9)           <­­­ esto da error porque no se importo

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

12. Creando librerías y parámetros entre scripts

Pasando parámetros entre scripts

Para pasar parámetros a un script “.py” es necesario hacer uso de la librería “sys” de la siguiente manera *crear un archivo llamado (parametro.py):

import sys

if (len(sys.argv) > 1 ):    print sys.argv    for c in sys.argv:        print c

En la consola escribir:

python parametro.py parametro1 2,tres 'cuatro 4'

   

http://www.eqsoft.net informes@eqsoft.net

CURSO PYTHONNIVEL INICIAL

12. Creando librerías y parámetros entre scripts

Ejecutando directamente un script en Python

Para poder lograr que Linux reconozca directamente que debe usar el interprete de Python en nuestros scripts es necesario añadir los siguiente en sus scripts:

#!/usr/bin/pythonprint “hola mundo”

El archivo “.py” debe tener derechos de ejecución:

chmod 777 archivo.py

para ejecutarlo en el mismo directorio:

./archivo.py