====== Python e mysql ======
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.
===== 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
===== L'interfaccia grafica =====
{{programmazione:python_e_mysql1.png|}} \\
Adesso , facendo riferimento all'articolo [[programmazione:sviluppare con libglade]], andiamo ad implementare una interfaccia grafica disegnata con [[http://glade.gnome.org/|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()