Listados adicionales

Acceso a BD relacional por PoPy

import string
class agenda:
    def __init__(self,modDB,info):
        self.db=modDB.connect(info)
        self.db.autoCommit(1)
    def volcado(self):
        ret=[]
        for k in self.db.keys():
            ret.append( (k,self.db[k]) )
        return ret
        
    def encuentra(self, clave):
        clave=string.upper(str(clave))
        cur=self.db.cursor()
        cur.execute('''select clave,nombre,direccion
                            from agenda
                            where clave='%s' ''' % clave)
        k=cur.fetchall()
        cur.close()
        if k:
            k=k[0]
            return (k[0],(k[1],k[2]))
        else:
            return None
        
    def busca(self, clave):
        clave='%'+string.upper(str(clave))+'%'
        cur=self.db.cursor()
        cur.execute('''select clave,nombre,direccion
                            from agenda
                            where clave like '%s' ''' % clave)
        ret=[]
        for k in cur.fetchall():
            ret.append( (k[0],(k[1],k[2])) )
        return ret
    def nuevo(self,clave,contenido):
        clave=string.upper(str(clave))
        nombre,direccion=contenido
        cur=self.db.cursor()
        cur.execute('''insert into agenda(clave,nombre,direccion)
                            values('%s','%s','%s')''' % (clave,nombre,direccion) )
        cur.close()


if __name__=='__main__':
    import PoPy 
    
    import pprint
    ag=agenda(PoPy,'dbname=template1')
    try:
        cur=ag.db.cursor()
        cur.execute('select * from agenda')
        cur.close()
    except:
        print 'creando tabla agenda'
        cur=ag.db.cursor()
        cur.execute("""create table agenda(
                                    clave varchar(255) not null,
                                    nombre varchar(255),
                                    direccion varchar(255) )""")
        print 'creando clave'
        cur=ag.db.cursor()
        cur.execute('create index agenda_pk on agenda(clave)')
        print 'insertando datos de prueba'
        ag.nuevo('ErnestoBKE', ('SQL Ernesto Molina','emolina@grupoburke.com'))
        ag.nuevo('Ernesto', ('SQL Ernesto Molina','rotoxl@jazzfree.com'))
        ag.nuevo('MarcosBKE', ('SQL Marcos Sánchez','msanchez@grupoburke.com'))
        ag.nuevo('Marcos', ('SQL Marcos Sánchez','rapto@arrakis.es'))
    print ag.encuentra('Ernesto')
    pprint.pprint (ag.busca('BKE'))
    ag.db.close()