Páginas

domingo, 7 de octubre de 2012

pequeño ejemplo en python un ABM con Sqlite3


#segovia-altas-bajas-sqlite3


import sqlite3 as dbapi
import os
arch="bbdd.dat"



def AgregaDatoDeptos():  #Agrega datos a la tabla deptos si el depto coincide con alguno de personas imprime la direccion
 bbdd = dbapi.connect(arch)
 cursor = bbdd.cursor()
 print('Ingrese el Depto')
 dep=raw_input('Depto: ');
 while (dep!='0'):
  dire=raw_input('Direccion: ');
  cursor.execute("insert into Deptos values (?,?)",(dep,dire))#Recordar que es posicional los ?
  print('Ingrese otro depto, o cero para salir');
  dep=raw_input('Depto: ');
  bbdd.commit()
 bbdd.close()


def AgregaDatoPersonas():  #Agrega datos a la tabla personas
 bbdd = dbapi.connect(arch)
 cursor = bbdd.cursor()
 print('Ingrese el nombre')
 nom=raw_input('Nombre: ');
 while (nom!='0'):
  doc=raw_input('Doc: ');
  departamento=raw_input('Departamento: ');
  cursor.execute("insert into Personas values (?,?,?)",(nom,doc,departamento))#Recordar que es posicional los ?
  print('Ingrese otro nombre, o cero para salir');
  nom=raw_input('Nombre: ');
  bbdd.commit()
 bbdd.close()


def CrearTabla(): #Crea Tablas solo si no existen
  bbdd = dbapi.connect(arch)
  cursor = bbdd.cursor()
  cursor.execute("""create table if not exists Personas (Id INTEGER UNIKE PRIMARY KEY, nombre text,dni text,departamento text)""")
  cursor.execute("""create table if not exists Deptos (Id INTEGER UNIKE PRIMARY KEY, Depto text,Direccion text)""")
  bbdd.commit()
  bbdd.close()


def Modificar(): #Modifica datos de  una persona buscada por nombre
  nom2=raw_input("Ingrese el nombre a buscar: ")
  nom=raw_input('Nombre modificado: ');
  doc=raw_input('Doc modificado: ');
  dep=raw_input('Departamento modificado: ');
  bbdd = dbapi.connect(arch)
  cursor = bbdd.cursor()
  cursor.execute("UPDATE Personas SET nombre = '"+nom+"',dni = '"+doc+"',departamento = '"+dep+"' WHERE nombre = '"+nom2+"'")
  nom2=raw_input("Desea guardar los cambios? responder con s o n ") #guarda o no los cambios recicle la variable jeje
  if nom2=='s':
   bbdd.commit()
  else:
   bbdd.rollback()
  bbdd.close()

def ImprimirDatos(): #Imprime la tabla ordenada por departamento
  if os.path.exists(arch):
   bbdd = dbapi.connect(arch)
   cursor = bbdd.cursor()
   cursor.execute("select * from Personas order by departamento")
   #print "Cantidad de elementos: "+str(len(cursor.fetchall()))  #cantidad de elementos al usarlo vacia la tupla
   print "Listado de Personas"
   print " "
   for tupla in cursor.fetchall():
    print tupla #En caso de querer imprimir solo un dato usar tupla[0] un rango tupla[0:1]
   print "------------------------------------------"
   print "Nombre de Campos"
   print " "
   cursor.execute("select * from Personas")
   for i in cursor.description:
    print i[0]

   #print cursor.description()
   #for tupla in cursor.fetchall():
   # print tupla
   bbdd.close()
  else:
   print "No existe el archivo"

def ImprimirTablasJuntas():
  bbdd = dbapi.connect(arch)
  cursor = bbdd.cursor()
  cursor.execute("select * from Personas,Deptos where Personas.departamento=Deptos.Depto")
  for tupla in cursor.fetchall():
   print tupla
  bbdd.close()

def ImprimirTablasCantporDepto():
  bbdd = dbapi.connect(arch)
  cursor = bbdd.cursor()
  #cursor.execute("select Personas.departamento,Deptos.Depto from Personas,Deptos Left Join Deptos USING(Depto)")
  cursor.execute("select distinct(Personas.departamento),count(Personas.departamento) from Personas group by departamento")
  for tupla in cursor.fetchall():
   print tupla
  bbdd.close()

def BorraDato(): #Borra una persona
  bbdd = dbapi.connect(arch)
  cursor = bbdd.cursor()
  nom=raw_input('Nombre: ')
  cursor.execute("DELETE from Personas WHERE nombre='"+nom+"'")
  bbdd.commit()
  bbdd.close()


if __name__=="__main__":
 op='2'
 while (op!='0'):
  print('\n*****************************')
  print('    Menu Principal   ')
  print('*****************************')
  print('0-Salir')
  print('1-Agregar Dato Personas')
  print('2-AgregarDepto')
  print('3-Modificar Dato')
  print('4-Borra Dato')
  print('5-Crear Tabla')
  print('6-Imprimir Tablas Juntas')
  print('7-Imprimir Tablas Cantidad por Depto')
  print('8-Imprimir Datos')
  print('*****************************')
  op=raw_input('Opcion: ')
  if (op=='1'):
      AgregaDatoPersonas()
  elif (op=='2'):
      AgregaDatoDeptos()
  elif (op=='3'):
      Modificar()
  elif (op=='4'):
      BorraDato()
  elif (op=='5'):
      CrearTabla()
  elif (op=='6'):
      ImprimirTablasJuntas()  
  elif (op=='7'): #Usa el  count
      ImprimirTablasCantporDepto()  
  elif (op=='8'):
      ImprimirDatos()

TUTORIAL Python para todos

escrito por Raúl González Duque. Se trata de un tutorial de Python adecuado para todos los niveles y que puedes descargar totalmente gratis.

'Python para todos' se distribuye bajo licencia Creative Commons Reconocimiento 2.5 España, lo que supone que puedes distribuirlo, modificarlo, traducirlo a otros idiomas, ... siempre que indiques el autor original'

El libro cuenta con 160 páginas en las que se tratan los siguientes temas:

  • Tipos básicos
  • Control de flujo
  • Funciones
  • Orientación a objetos
  • Programación funcional
  • Excepciones
  • Módulos y paquetes
  • Entrada / Salida
  • Expresiones regulares
  • Sockets
  • Interacción con webs
  • Threads
  • Serialización de objetos
  • Bases de datos
  • Documentación
  • Pruebas
  • Distribuir aplicaciones Python

Descargar el tutorial de Python 'Python para todos'

Puedes descargar el tutorial de Python 'Python para todos' en formato PDF (1,21 MB) haciendo clic sobre el siguiente enlace: