1 Premessa
SQLAlchemy, http://www.sqlalchemy.org/, é una libreria che ci permette di utilizzare in python svariati database tra cui:SQLite, Mysql, Postgresql, Firebird e altri database, anche proprietari
2 Connettersi a un database SQLlite
La connessione a un db in SQLite (http://www.sqlite.org/) é molto semplice basta puntare a un file nel nostro HD
Creare il file ‘engine.py’ e inserire il seguente codice:
#!/usr/bin/python
# coding: latin-1
from sqlalchemy import create_engine
# mi collego al db slqilte puntando al file e scrivo l'output
engine = create_engine('sqlite:///database.sqlite', echo=True)
SQLite é un database semplice da utilizzare ma allo stesso tempo potente, tutti i dati vengono inseriti in un unico file, dati tabelle viste ecc ecc. SQLite ci permette di creare un database e svilupparlo, in modo intuitivo e veloce, e allo stesso tempo non si rischia di compromettere altri database, pertanto ne cosiglio l’uso per creare i vostri prototipi.
3 Le tabelle
3.1 Sessione di conessione al database
Creare un file ‘tables.py’ e inserire il seguente codice:
#!/usr/bin/python
# coding: latin-1
from sqlalchemy import Sequence
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import engine
engine = engine.engine
# creo la base per le tabelle
Base = declarative_base()
# creo il metadata dalla base
metadata = Base.metadata
# creo la sessione al database
Session = sessionmaker(bind=engine)
session = Session()
Questo codice ci permette di connetterci al nostro database e di creare una sessione che andremo poi ad utilizzare.
3.2 Definire una tabella
Aggiungere il seguente testo al file ‘tables.py’:
class User(Base):
# nome della tabella
__tablename__ = 'users'
# definisco che id_user \'e un numero intero in sequenza e chiave primaria
id_user = Column(Integer, Sequence('user_id_seq'), primary_key=True)
# definisco che nome \'e una stinga
name = Column(String)
# definisco che fullname \'e una stringa
fullname = Column(String)
# inizializzo la classe
def __init__(self, name, fullname):
self.name = name
self.fullname = fullname
Questo codice ci permette di definire una tabella permettendoci di utilizzare la nostra classe in fase di inserimento e visualizzazione dei dati.
Abbiamo definito i campi cosí:
- Il campo id user é una sequenza di numeri ed é una chiave primaria.
- Il campo name é una stringa
- Il campo fullname é una stringa
3.3 Funzione per la creazione delle tabelle
Aggiungere il seguente testo al file ‘tables.py’:
def initializze_sql():
# crea le tabelle all'interno del database
metadata.create_all(engine)
Questo funzione ci permette di creare le nostre tabelle nel database, e potremo utilizzarla successivamente.
4 Pagine html dinamiche
4.1 Messaggio di benvenuto e creazione del database
Creare un file ‘visitatori.py’ e inserire il seguente codice:
#!/usr/bin/python
# coding: latin-1
import cherrypy
import tables
# prendo la conessione al database
engine = tables.engine
# creo una sessione dalla conessione al db
session = tables.session
# attivo la tabella user
users = tables.User
class Benvenuto:
def index(self):
return "Benvenuto!"
index.exposed = True
def create_db(self):
# creo il db e tutte le tabelle nel database
out = tables.initializze_sql()
return "DB creato, Tabelle Create."
create_db.exposed = True
Chiudere il file ‘visitatori.py’ inserendo il seguente codice
cherrypy.quickstart(Benvenuto())
Eseguiremo la nostra applicazione web aprendo un terminale e dando i seguenti comandi
cd Progetto
python visitatori.py
A questo punto si puo’ puntare il nostro browser sull’indirizzo http://localhost:8080/ e vedremo apparire il messaggio di benvenuto.
Puntando all’indirizzo http://localhost:8080/create_db creeremo il db e la tabella users
4.2 Scheda Visitatore
Creare il file ‘visitatore.html’ e inserire il seguente codice
<h1>Scheda Visitatore</h1>
<p><b>Prego inserire il tuo nome e cognome</b></p>
<form action="inserisci" method="post">
<div>Nome
<input type="text" name="nome" value="" size="15" maxlength="40"/>
</div>
<div>Cognome
<input type="text" name="cognome" value="" size="15" maxlength="40"/>
</div>
<p><input type="submit" value="Inserisci"/></p>
<p><input type="reset" value="Pulisci"/></p>
</form>'
Inserire la funzione ‘visitatore’ nel file ‘visitatori.py’ con il seguente codice:
def visitatore(self):
# leggo il file visitatore.html in sola lettura
filehtml = open('visitatore.html', 'r')
# inizializzo la variabile per l'output del html
out_html = ''
# leggo tutte le rige del file html
listato = filehtml.readlines()
# inserisco le righe del file html inserendole nella variabile del html
for x in listato:
out_html = out_html+ x
# restituisco all'output la variabile con il file html
return out_html
visitatore.exposed = True
Questa funzione va a leggere il file visitatore.html e lo rende disponibile al client web.
Puntando, con il nostro client web, alla pagina indirizzo http://127.0.0.1:8080/visitatore abbiamo una scheda che ci permette di inserire il nome e cognome che poi andremo ad utilizzare nella funzione successiva.
4.3 Salvataggio dei dati in db
Inserire la funzione ‘inserisci’ nel file ‘visitatori.py’ con il seguente codice:
def inserisci(self, nome, cognome):
# prendo l'input dal post e creo un nuovo utente
new_user=users(nome,cognome)
# invio alla mia sessione un nuovo utente nella tabella users
session.add(new_user)
# invo la sessione e creo il nuovo utente in db
session.commit()
out_html = nome + ' ' + cognome + ' Benvenuto!!'
return out_html
inserisci.exposed = True
Questa funzione ci permette di prendere i dati ‘nome’ e ‘cognome’ di inserirli nel database e successivamente di dare il benvenuto.
Inserendo i dati nella scheda descritta precedentemente e premendo il pulsante inserisci andremo a salvare i dati nel database.
4.4 Listato dei visitatori
Inserire la funzione ‘lista_visitatori’ nel file ‘visitatori.py’ con il seguente codice:
def lista_visitatori(self):
# apro il mio output scrivendo il titolo della pagina
out = "<h1><b>Lista Visitatori</b></h1>"
# inserisco nell'output le etichette in grassetto
out = out + "<p><b>Nome & Cognome</b></p>"
# creo una maschera per la riga che andr\'a a ospitare i dati dal db
riga_masq = "<div>{nome} {cognome}</div>"
# per ogni riga della tabella Users
# inserisco nell'output la maschera con il nome e il cognome
for row in session.query(users.__table__).all():
out = out + riga_masq.format(nome=row.name,cognome=row.fullname)
return out
lista_visitatori.exposed = True
Questa funzione ci permette di leggere i dati salvati nella tabella ‘users’ e di renderli disponibili al client web. // Puntando, con il nostro client web, alla pagina indirizzo http://127.0.0.1:8080/lista_visitatori, avremo la lista di tutti i visitatori che hanno inserito il loro nome e cognome.
5 Listato dei file
5.1 engine.py
#!/usr/bin/python
# coding: latin-1
from sqlalchemy import create_engine
# mi collego al db slqilte puntando al file e scrivo l'output
engine = create_engine('sqlite:///database.sqlite', echo=True)
5.2 tables.py
#!/usr/bin/python
# coding: latin-1
from sqlalchemy import Sequence
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import engine
engine = engine.engine
# creo la base per le tabelle
Base = declarative_base()
# creo il metadata dalla base
metadata = Base.metadata
# creo la sessione al database
Session = sessionmaker(bind=engine)
session = Session()
class User(Base):
# nome della tabella
__tablename__ = 'users'
# definisco che id_user \'e un numero intero in sequenza e chiave primaria
id_user = Column(Integer, Sequence('user_id_seq'), primary_key=True)
# definisco che nome \'e una stinga
name = Column(String)
# definisco che fullname \'e una stringa
fullname = Column(String)
# inizializzo la classe
def __init__(self, name, fullname):
self.name = name
self.fullname = fullname
def initializze_sql():
# crea le tabelle all'interno del database
metadata.create_all(engine)
5.3 visitatori.py
#!/usr/bin/python
# coding: latin-1
import cherrypy
import tables
# prendo la conessione al database
engine = tables.engine
# creo una sessione dalla conessione al db
session = tables.session
# attivo la tabella user
users = tables.User
class Benvenuto:
def index(self):
return "Benvenuto!"
index.exposed = True
def create_db(self):
# creo il db e tutte le tabelle nel database
out = tables.initializze_sql()
return "DB creato, Tabelle Create."
create_db.exposed = True
def visitatore(self):
# leggo il file visitare.html in sola lettura
filehtml = open('visitatore.html', 'r')
# inizializzo la variabile per l'output del html
out_html = ''
# leggo tutte le rige del file html
listato = filehtml.readlines()
# inserisco le righe del file html inserendole nella variabile del html
for x in listato:
out_html = out_html+ x
# restituisco all'output la variabile con il file html
return out_html
visitatore.exposed = True
def inserisci(self, nome, cognome):
# prendo l'input dal post e creo un nuovo utente
new_user=users(nome,cognome)
# invio alla mia sessione un nuovo utente nella tabella users
session.add(new_user)
# invo la sessione e creo il nuovo utente in db
session.commit()
out_html = nome + ' ' + cognome + ' Benvenuto!!'
return out_html
inserisci.exposed = True
def lista_visitatori(self):
# apro il mio output scrivendo il titolo della pagina
out = "<h1><b>Lista Visitatori</b></h1>"
# inserisco nell'output le etichette in grassetto
out = out + "<p><b>Nome & Cognome</b></p>"
# creo una maschera per la riga che andr\'a a ospitare i dati dal db
riga_masq = "<div>{nome} {cognome}</div>"
# per ogni riga della tabella Users
# inserisco nell'output la maschera con il nome e il cognome
for row in session.query(users.__table__).all():
out = out + riga_masq.format(nome=row.name,cognome=row.fullname)
return out
lista_visitatori.exposed = True
cherrypy.quickstart(Benvenuto())
File translated from TEX by TTH, version 3.85.
On 10 Mar 2011, 08:49.