Funciones para bases de datos

Luis Tomas Wayar lwayar en retronet.com.ar
Vie Mayo 27 02:40:24 CEST 2005


El Jue 26 May 2005 21:01, Luis Tomas Wayar escribió:
Hay un error en la ultima linea de la primera funcion, deberia decir:

tabla.delete(lista.current().id)

> Hola, estoy escribiendo unos programas que usan bases de datos y he creado un par de
>  funciones que me gustaria compartir con ustedes si es que son de su utilidad y como soy 
> relativamente nuevo en este lenguaje someterlo a su escrutinio a fin de corregirlas y perfecionarlas.
> 
> Uso como mecanismo de abstraccion de la base de datos el ORM SQLObject. Para la interfaz
> de usuario uso Newt para python (Snack).
> 
> La primera funcion tiene por objeto recibir el nombre de una tabla y la pantalla para newt y 
> a partir de ello crear una lista con los registros de la tabla la que se despliega en un objeto newt Listbox
> de newt luego agrega tres botones con la clase de newt ButtonBar para  el clasico Altas,
> Bajas y Modificaciones. 
> 
> Son necesarias las siguitentes librerias:
> 
> from sqlobject import *
> from snack import *
> from string import *
> 
> Ahora si la primera funcion:
> 
> def abm_tabla(tabla,s):
> 	columnas = [col.name for col in tabla._columns]
> 	registros=tabla.select()
> 	botones = ButtonBar(s, (("Agregar", "agregar"), ("Modificar", "modificar"), ("Borrar", "borrar")))
> 	lista = Listbox(registros.count(), width = 47, returnExit = 1)
> 	items = [[getattr(item, nom_columna) for nom_columna in columnas] for item in registros]
> 	if "id" not in columnas:
> 		columnas.insert(0, "id")
> 	for registro in registros:
> 		item = [getattr(registro, nom_columna) for nom_columna in columnas]
> 		linea=''
> 		for campo in item:
> 			linea=linea + " " + str(campo)
> 		lista.append(linea, registro)
> 	g = GridForm(s,tabla._table.capitalize()+" - Altas, bajas y modificaciones:", 1, 2)
> 	g.add(lista, 0, 0)
> 	g.add(botones, 0, 1, growx = 1)
> 	result = g.runOnce()
> 	if botones.buttonPressed(result) == "agregar":
> 		alta_registro(tabla,s)
> 	elif botones.buttonPressed(result) == "modificar":
> 		modif_registro(lista.current().id,s)
> 	elif botones.buttonPressed(result) == "borrar":
> 		Usuarios.delete(lista.current().id)
> 
> La segunda funcion permite hacer el dataentry del registro, recibe nuevamente como parametros 
> la tabla y la pantalla. Uso en este caso una clase EntryWindow de newt. 
> 
> def alta_registro(tabla,s):
> 	columnas = [col.name.capitalize() for col in tabla._columns]
> 	campos= [col.name for col in tabla._columns]
> 	(boton, (etiquetas)) = EntryWindow(s, 'Nuevo registro', 'Cargue ' + tabla._table.capitalize() + ':\n', columnas)
> 	dict_campos={}
> 	if boton=='ok':
> 		for x in range(len(campos)):
> 			dict_campos[campos[x]] = etiquetas[x]
> 		registro=tabla(**dict_campos)
> 
> Espero que les sea de utilidad y me ayuden a perfecionar el codigo. Hay que destacar que la idea 
> es que sin saber la estructura de cada tabla estas funciones sirvan para crear la lista y el dataentry de
> cualquier tabla.
> 
> 	Saludos a la lista.
> 
> 
> 							Luis Tomas Wayar
> 




Más información sobre la lista de distribución Python-es