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