Autore: Fabio Di Matteo
Ultima revisione: 21/04/2007
Interagire con il database mysql grazie al python è davvero banale e in un batter d'occhio si possono realizzare applicazioni di una certa complessità.
In questo articolo vi guiderò passo passo alla realizzazione di una piccola agendina elettronica con tanto di interfaccia grafica. Per adesso tralasciamo l'interfaccia grafica e concentriamoci sulla connessione al database.
Il database che prendo in esempio (si chiama “prova”) ha una tabella di nome “tabella1” con i campi “id” , “cognome” ,“nome”; da questa tabella filtrerò tutti i nominativi il cui cognome inizia per una certa stringa contenuta nella variabile “criterio”. Creiamo il database e ricordiamoci di abilitare l'utente che usiamo in mysql a connettersi dall'host dove risiede il nostro database.
#!/usr/bin/env python #importo il moduli che mi servono import _mysql import _mysql_exceptions #solo per creare il pacchetto indipendente criterio="" #variabile criterio di ricerca del cognome #mi connetto al database db=_mysql.connect(host="192.168.1.2",user="root",passwd="root",db="prova") db.query("""SELECT * from tabella1 where cognome like'""" + criterio + "%'" ) r=db.store_result() #rende disponibili i risultati dati=r.fetch_row(0) #metto i risultati in una tupla (di tuple) print dati #se voglio li stampo pure in console sottoforma di tupla
Adesso , facendo riferimento all'articolo sviluppare con libglade, andiamo ad implementare una interfaccia grafica disegnata con Glade.
L'interfaccia è molto semplice, contiene una GtkCList (griglia), delle entry e un bottone per la ricerca.
#!/usr/bin/env python import pygtk #solo per creare il pacchetto indipendente import gtk import gtk.glade import atk #solo per creare il pacchetto indipendente import gtk._gtk #solo per creare il pacchetto indipendente import pango #solo per creare il pacchetto indipendente import _mysql import _mysql_exceptions #solo per creare il pacchetto indipendente class Application: def __init__(self): self.widgetTree = gtk.glade.XML('interfaccia/interfaccia.glade') self.widgetTree.signal_autoconnect(self) def on_frmMain_delete_event(self, widget, *args): gtk.main_quit() #prendo il criterio di ricerca dalla texbox def on_cmdCerca_clicked(self, widget, *args): criterio=self.widgetTree.get_widget('txtCerca').get_text() db=_mysql.connect(host="192.168.1.2",user="root", passwd="root",db="prova") db.query("""SELECT * from tabella1 where cognome like'""" + criterio + "%'" ) r=db.store_result() #rende disponibili i risultati dati=r.fetch_row(0) #metto i risultati in una tupla (di tuple) griglia=self.widgetTree.get_widget('griglia') griglia.clear() #metto i dati in una griglia indice=0 for i in dati: griglia.append(dati[indice]) indice=indice+1 #stampo da qualche parte le righe selezionate col mouse def on_griglia_select_row(self, widget, *args): griglia=self.widgetTree.get_widget('griglia') #qui scrivo la riga selezionata sulla console print "----------------------------------------------------" print "ID: ", griglia.get_text(griglia.selection[0],0) print "Cognome: ", griglia.get_text(griglia.selection[0],1) print "Nome: ", griglia.get_text(griglia.selection[0],2) print "----------------------------------------------------" #qui scrivo la riga selezionata sulle textbox id=self.widgetTree.get_widget('txtId') cognome=self.widgetTree.get_widget('txtCognome') nome=self.widgetTree.get_widget('txtNome') id.set_text(griglia.get_text(griglia.selection[0],0)) cognome.set_text(griglia.get_text(griglia.selection[0],1)) nome.set_text(griglia.get_text(griglia.selection[0],2)) Application() gtk.main()