Funciones para bases de datos

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


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
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


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