SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
Database e Python
   Python supporta l’accesso a tutti i più noti
     DBMS
   E’ sufficiente scaricare e installare un modulo
     adeguato
   Noi utilizzeremo MySQL e MySQLdb – un
     modulo DB API 2 compatibile




Linguaggi dinamici – A.A. 2009/2010
                                                       2
Python Database API specification
   La libreria MySQLdb implementa la standard
     Python Database API Specification
   La API (Application Programming Interface)
     definisce l’insieme di funzioni a nostra
     disposizione
   Praticamente tutti i moduli database per
     Python implementano questa API
   Quindi, tutti i concetti di base che impareremo
     sono validi per MySQL ma…
   …a meno di qualche piccola modifica sono
     validi per interfacciarsi a qualunque DBMS

Linguaggi dinamici – A.A. 2009/2010
                                                       3
L’importanza di una API
   In Python, fino a poco tempo fa, la gestione dei
     database era un miscuglio di moduli scritti da
     diverse persone in tutto il mondo
        Mancanza di uniformità tale da poter
          semplificare la scrittura di codice!
   Per semplificare l'accesso ai database
     relazionali è stata realizzata un' API che è di
     riferimento per tutti quelli che dovranno
     scrivere un modulo per l'accesso ad un
     database relazionale.
   Versione corrente: 2.0

Linguaggi dinamici – A.A. 2009/2010
                                                        4
L’importanza di una API
   L'API mette le basi per le chiamate al modulo
     dell'accesso al db
   Ad esempio: per collegarsi ad Oracle o a
     MySQL il metodo per farlo si chiama sempre
     connect()
   Questo permette semplicemente di scrivere
     codice portabile su altre piattaforme database




Linguaggi dinamici – A.A. 2009/2010
                                                      5
Connessione al Database
   Attraverso il metodo connect(), Python crea un
     oggetto connessione al db e ne restituisce
     l'istanza
   L’oggetto connessione fornisce i metodi veri e
     propri per la gestione del database:
   cursor()
        restituisce un cursore dove poter lanciare
          SELECT, INSERT, UPDATE, stored procedure
          ecc...




Linguaggi dinamici – A.A. 2009/2010
                                                       6
Connessione al Database
   commit()
        conferma tutte le modifiche apportate al db,
          disponibile solamente su database di tipi
          transazionale come ad esempio Oracle e
          PostgreSQL (MySQL supporta le transazioni
          solamente con tabelle di tipo InnoDB e non su
          quelle stabdard MyISAM)
   rollback()
        revoca tutte le modifiche apportate al db,
          disponibile solamente su database di tipi
          transazionale
   close()
        chiude la connessione con il database
Linguaggi dinamici – A.A. 2009/2010
                                                          7
Cursori Database
   Per qualsiasi operazione sul DB dobbiamo
     creare un oggetto Cursor con il metodo cursor()
   L'oggetto Cursor creato avrà questi metodi e
     attributi:
   execute(operazione [,parametri])
        prepara ed esegue una operazione sul database
   callproc(nomeprocedura [,parametri])
        chiama una stored procedure (disponibile
          solamente se il database le supporta)




Linguaggi dinamici – A.A. 2009/2010
                                                          8
Cursori Database
   Per qualsiasi operazione sul DB dobbiamo
     creare un oggetto Cursor con il metodo cursor()
   L'oggetto Cursor creato avrà questi metodi e
     attributi:
   rowcount
        attributo che contiene il numero totale di record
          che ha restituito l'ultima chiamata al metodo
          execute()
   close()
        chiude il cursore


Linguaggi dinamici – A.A. 2009/2010
                                                              9
Esempio di utilizzo con MySQL
   Prima di tutto si importa il modulo:
     import MySQLdb
   Poi si crea la connessione, ad esempio:
     conn = MySQLdb.connect
                (host=localhost”,
                 user=root”,
                 passwd=”,
                 db=DBprova )
      In questo caso: connessione ad un server MySQL
        che sta girando sulla stessa macchina del nostro
        script, sulla porta standard 3306, collegamento
        come utente root senza password
Linguaggi dinamici – A.A. 2009/2010
                                                           10
Esempio di utilizzo: SELECT
   Creiamo un oggetto di tipo cursore:
     cursore = conn.cursor()
   A questo punto possiamo lanciare una query,
     ad esempio:
     cursore.execute('SELECT * FROM frutta’)
     cursore.fetchall()
     ((1, 'Mele', 50), (2, 'Pere', 25), (3, 'Banane', 60))




Linguaggi dinamici – A.A. 2009/2010
                                                                11
Esempio di utilizzo: SELECT
   NOTA:
        il risultato è una tupla che contiene tante tuple
          per ogni record recuperato (nel nostro esempio,
          tutti i record presenti nella tabella frutta)
        Notate che i dati contenuti nelle tuple sono di
          tipo diverso: interi, stringhe, ecc.
        Infatti, i tipi di dati SQL vengono, nel limite delle
          possibilità, tradotti in tipi equivalenti di Python




Linguaggi dinamici – A.A. 2009/2010
                                                                  12
ESEMPI:
                                                    selectMySQL.py
            Esempio di utilizzo: SELECT
   E’ anche possibile iterare in un ciclo for i
     risultati, per elaborarli
   Ad esempio, per formattarli in colonne:
     for record in cursore.fetchall():
     ... print '%dt%st%d' % (record[0], record[1],
         record[2])
     ...
     1 Mele      50
     2 Pere      25
     3 Banane 60
     

Linguaggi dinamici – A.A. 2009/2010
                                                                13
Esempio di utilizzo: INSERT
   Per effettuare una modifica o un inserimento:
      cursore.execute('INSERT INTO frutta (nome,
         quantita) VALUES(%s, %s)', ('Pompelmi', 10))
   Come si vede, si passano due parametri al
     metodo:
       la stringa SQL di preparazione

       una tupla con i dati da inserire


   Questo metodo risulta molto potente per il
     trattamento veloce dei dati da inserire
   Indipendentemente dal tipo di dato, la query SQL
     completa verrà creata dal metodo execute prima di
     essere eseguita sul database
Linguaggi dinamici – A.A. 2009/2010
                                                         14
Esempio di utilizzo: UPDATE
   Allo stesso modo, è possibile effettuare un
     aggiornamento:
     cursore.execute('UPDATE frutta SET quantita=
     %s WHERE nome='Pere'', (5))
   ATTENZIONE: alla fine delle operazioni,
     ricordarsi sempre di chiudere gli oggetti
     relativi (nell’ordine inverso in cui erano stati
     aperti)! Ad esempio:
     cursor.close ()
     conn.close ()



Linguaggi dinamici – A.A. 2009/2010
                                                        15
… e in PERL?
   La maggior parte dei concetti di base visti in
     Python per la connessione e l’utilizzo di un
     DBMS (connessione, preparazione ed
     esecuzione di statement, ecc.) sono concetti
     standard indipendenti dal particolare
     linguaggio, quindi sono validi anche per il
     PERL
   In questo caso, la API da utilizzare è DBI
   Per qualunque informazione:
        http://dbi.perl.org/



Linguaggi dinamici – A.A. 2009/2010
                                                      16
ESEMPI:
                                               selectMySQL.pl
                               … e in PERL?
use DBI;
$dbh = DBI-connect('DBI:mysql:DBProva', 'root', ''
         ) || die Could not connect to database:
                                    $DBI::errstr;
$sql = ”SELECT * FROM frutta;
$sth = $dbh-prepare($sql);
$sth-execute
or die SQL Error: $DBI::errstrn;
while (@row = $sth-fetchrow_array) {
  print @rown;
  }
…
Linguaggi dinamici – A.A. 2009/2010
                                                           17

Mais conteúdo relacionado

Mais procurados

Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristicheMajong DevJfu
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#Marco Parenzan
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingMajong DevJfu
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéEdmondo Porcu
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - TheoryNaLUG
 
Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaCristina Attori
 
Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolarePyCon Italia
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48hFLT.lab
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio cughetta
 

Mais procurados (20)

2006 Py03 intermedio
2006 Py03 intermedio2006 Py03 intermedio
2006 Py03 intermedio
 
2006 Py01 intro
2006 Py01 intro2006 Py01 intro
2006 Py01 intro
 
Pe t3 perl-moduli
Pe t3 perl-moduliPe t3 perl-moduli
Pe t3 perl-moduli
 
T7 librerie
T7 librerieT7 librerie
T7 librerie
 
Pe t2 perl-caratteristiche
Pe t2 perl-caratteristichePe t2 perl-caratteristiche
Pe t2 perl-caratteristiche
 
Pe t1 perl-intro
Pe t1 perl-introPe t1 perl-intro
Pe t1 perl-intro
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
Pe a3 perl-metaprogramming
Pe a3 perl-metaprogrammingPe a3 perl-metaprogramming
Pe a3 perl-metaprogramming
 
T3 esempio runtime
T3 esempio runtimeT3 esempio runtime
T3 esempio runtime
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
11 I File
11   I File11   I File
11 I File
 
Pe t4 perl-oggetti
Pe t4 perl-oggettiPe t4 perl-oggetti
Pe t4 perl-oggetti
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - Theory
 
Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in Java
 
Bash programming
Bash programmingBash programming
Bash programming
 
Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolare
 
2006 Py02 base
2006 Py02 base2006 Py02 base
2006 Py02 base
 
Corso Iphone in 48h
Corso Iphone in 48hCorso Iphone in 48h
Corso Iphone in 48h
 
2008 python
2008 python2008 python
2008 python
 
Caratteristiche del linguaggio c
Caratteristiche del linguaggio cCaratteristiche del linguaggio c
Caratteristiche del linguaggio c
 

Destaque

Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testingMajong DevJfu
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazioneMajong DevJfu
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA CloudMajong DevJfu
 
esercizio sigda n 11
esercizio sigda n 11esercizio sigda n 11
esercizio sigda n 11Majong DevJfu
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su LinuxMajong DevJfu
 
Linguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendLinguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendMajong DevJfu
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Majong DevJfu
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Majong DevJfu
 
Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86Majong DevJfu
 
5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria5 Trasporto Affidabile Teoria
5 Trasporto Affidabile TeoriaMajong DevJfu
 
2 sistemi informativi d azienda
2 sistemi informativi d azienda2 sistemi informativi d azienda
2 sistemi informativi d aziendaMajong DevJfu
 
4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color4 Livello Ip Parte1 Color
4 Livello Ip Parte1 ColorMajong DevJfu
 
Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Majong DevJfu
 

Destaque (20)

Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
 
Py a5 python-text
Py a5 python-textPy a5 python-text
Py a5 python-text
 
Pe a2 perl-documentazione
Pe a2 perl-documentazionePe a2 perl-documentazione
Pe a2 perl-documentazione
 
9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 
Pycon
PyconPycon
Pycon
 
8 Www2009 Parte1
8 Www2009 Parte18 Www2009 Parte1
8 Www2009 Parte1
 
3 H2 N Parte3
3 H2 N Parte33 H2 N Parte3
3 H2 N Parte3
 
esercizio sigda n 11
esercizio sigda n 11esercizio sigda n 11
esercizio sigda n 11
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su Linux
 
Linguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: FrontendLinguaggi Formali e Compilazione: Frontend
Linguaggi Formali e Compilazione: Frontend
 
Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03Sistemi Operativi: Meccanismi - Lezione 03
Sistemi Operativi: Meccanismi - Lezione 03
 
Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04Sistemi Operativi: Struttura - Lezione 04
Sistemi Operativi: Struttura - Lezione 04
 
E6 Concorre
E6 ConcorreE6 Concorre
E6 Concorre
 
Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86Architettura dei Calcolatori Subroutines80x86
Architettura dei Calcolatori Subroutines80x86
 
5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria5 Trasporto Affidabile Teoria
5 Trasporto Affidabile Teoria
 
2 sistemi informativi d azienda
2 sistemi informativi d azienda2 sistemi informativi d azienda
2 sistemi informativi d azienda
 
4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color4 Livello Ip Parte1 Color
4 Livello Ip Parte1 Color
 
9 Ftp Telnet Email
9 Ftp Telnet Email9 Ftp Telnet Email
9 Ftp Telnet Email
 
Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05Sistemi Operativi: Struttura avanzata - Lezione 05
Sistemi Operativi: Struttura avanzata - Lezione 05
 
6 Dns Parte2
6 Dns Parte26 Dns Parte2
6 Dns Parte2
 

Semelhante a Py a6 python-database

Programmazione web libera dai framework
Programmazione web libera dai frameworkProgrammazione web libera dai framework
Programmazione web libera dai frameworkFrancesca1980
 
SQLite in Xamarin.Forms
SQLite in Xamarin.FormsSQLite in Xamarin.Forms
SQLite in Xamarin.FormsGuido Magrin
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxGiovanni Cappellini
 
WPF & LINQ: VB T&T Community After Hour @ Microsoft Days 08
WPF & LINQ: VB T&T Community After Hour @ Microsoft Days 08WPF & LINQ: VB T&T Community After Hour @ Microsoft Days 08
WPF & LINQ: VB T&T Community After Hour @ Microsoft Days 08Alessandro Del Sole
 
MySQL 5
MySQL 5MySQL 5
MySQL 5jekil
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)jampslide
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009Massimiliano Dessì
 
Deftcon 2012 - Meo Bogliolo - SQLite Forensics
Deftcon 2012 - Meo Bogliolo - SQLite ForensicsDeftcon 2012 - Meo Bogliolo - SQLite Forensics
Deftcon 2012 - Meo Bogliolo - SQLite ForensicsDeft Association
 
Deftcon 2012 - Meo Bogliolo - SQLite Forensics
Deftcon 2012 - Meo Bogliolo - SQLite ForensicsDeftcon 2012 - Meo Bogliolo - SQLite Forensics
Deftcon 2012 - Meo Bogliolo - SQLite ForensicsSandro Rossetti
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Gian Maria Ricci
 

Semelhante a Py a6 python-database (20)

Office & VBA - Giorno 6
Office & VBA - Giorno 6Office & VBA - Giorno 6
Office & VBA - Giorno 6
 
Programmazione web libera dai framework
Programmazione web libera dai frameworkProgrammazione web libera dai framework
Programmazione web libera dai framework
 
SQLite in Xamarin.Forms
SQLite in Xamarin.FormsSQLite in Xamarin.Forms
SQLite in Xamarin.Forms
 
Php e database: php mysql
Php e database: php mysqlPhp e database: php mysql
Php e database: php mysql
 
Office & VBA - Giorno 7
Office & VBA - Giorno 7Office & VBA - Giorno 7
Office & VBA - Giorno 7
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
 
Dot net framework 2
Dot net framework 2Dot net framework 2
Dot net framework 2
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
 
WPF & LINQ: VB T&T Community After Hour @ Microsoft Days 08
WPF & LINQ: VB T&T Community After Hour @ Microsoft Days 08WPF & LINQ: VB T&T Community After Hour @ Microsoft Days 08
WPF & LINQ: VB T&T Community After Hour @ Microsoft Days 08
 
MySQL 5
MySQL 5MySQL 5
MySQL 5
 
NSFDB2 - Domino e DB2 e....integrazione AS/400
NSFDB2 - Domino e DB2 e....integrazione AS/400NSFDB2 - Domino e DB2 e....integrazione AS/400
NSFDB2 - Domino e DB2 e....integrazione AS/400
 
Wcf data services
Wcf data servicesWcf data services
Wcf data services
 
JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)JAMP DAY 2010 - ROMA (1)
JAMP DAY 2010 - ROMA (1)
 
Excel development e sql 2.1
Excel development e sql   2.1Excel development e sql   2.1
Excel development e sql 2.1
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009
 
Deftcon 2012 - Meo Bogliolo - SQLite Forensics
Deftcon 2012 - Meo Bogliolo - SQLite ForensicsDeftcon 2012 - Meo Bogliolo - SQLite Forensics
Deftcon 2012 - Meo Bogliolo - SQLite Forensics
 
Deftcon 2012 - Meo Bogliolo - SQLite Forensics
Deftcon 2012 - Meo Bogliolo - SQLite ForensicsDeftcon 2012 - Meo Bogliolo - SQLite Forensics
Deftcon 2012 - Meo Bogliolo - SQLite Forensics
 
MongoDB
MongoDBMongoDB
MongoDB
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010
 
ORM - Introduzione
ORM - IntroduzioneORM - Introduzione
ORM - Introduzione
 

Mais de Majong DevJfu

8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processesMajong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product lineMajong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformationMajong DevJfu
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven ArchitectureMajong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture PortfolioMajong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural stylesMajong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architectureMajong DevJfu
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a productMajong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural stylesMajong DevJfu
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
25 architectural adaptationMajong DevJfu
 

Mais de Majong DevJfu (20)

8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
 
Uml3
Uml3Uml3
Uml3
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
5
55
5
 
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
 
3
33
3
 
2
22
2
 
1
11
1
 
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
 
26 standards
26 standards26 standards
26 standards
 
25 architectural adaptation
25 architectural adaptation25 architectural adaptation
25 architectural adaptation
 

Py a6 python-database

  • 1.
  • 2. Database e Python Python supporta l’accesso a tutti i più noti DBMS E’ sufficiente scaricare e installare un modulo adeguato Noi utilizzeremo MySQL e MySQLdb – un modulo DB API 2 compatibile Linguaggi dinamici – A.A. 2009/2010 2
  • 3. Python Database API specification La libreria MySQLdb implementa la standard Python Database API Specification La API (Application Programming Interface) definisce l’insieme di funzioni a nostra disposizione Praticamente tutti i moduli database per Python implementano questa API Quindi, tutti i concetti di base che impareremo sono validi per MySQL ma… …a meno di qualche piccola modifica sono validi per interfacciarsi a qualunque DBMS Linguaggi dinamici – A.A. 2009/2010 3
  • 4. L’importanza di una API In Python, fino a poco tempo fa, la gestione dei database era un miscuglio di moduli scritti da diverse persone in tutto il mondo Mancanza di uniformità tale da poter semplificare la scrittura di codice! Per semplificare l'accesso ai database relazionali è stata realizzata un' API che è di riferimento per tutti quelli che dovranno scrivere un modulo per l'accesso ad un database relazionale. Versione corrente: 2.0 Linguaggi dinamici – A.A. 2009/2010 4
  • 5. L’importanza di una API L'API mette le basi per le chiamate al modulo dell'accesso al db Ad esempio: per collegarsi ad Oracle o a MySQL il metodo per farlo si chiama sempre connect() Questo permette semplicemente di scrivere codice portabile su altre piattaforme database Linguaggi dinamici – A.A. 2009/2010 5
  • 6. Connessione al Database Attraverso il metodo connect(), Python crea un oggetto connessione al db e ne restituisce l'istanza L’oggetto connessione fornisce i metodi veri e propri per la gestione del database: cursor() restituisce un cursore dove poter lanciare SELECT, INSERT, UPDATE, stored procedure ecc... Linguaggi dinamici – A.A. 2009/2010 6
  • 7. Connessione al Database commit() conferma tutte le modifiche apportate al db, disponibile solamente su database di tipi transazionale come ad esempio Oracle e PostgreSQL (MySQL supporta le transazioni solamente con tabelle di tipo InnoDB e non su quelle stabdard MyISAM) rollback() revoca tutte le modifiche apportate al db, disponibile solamente su database di tipi transazionale close() chiude la connessione con il database Linguaggi dinamici – A.A. 2009/2010 7
  • 8. Cursori Database Per qualsiasi operazione sul DB dobbiamo creare un oggetto Cursor con il metodo cursor() L'oggetto Cursor creato avrà questi metodi e attributi: execute(operazione [,parametri]) prepara ed esegue una operazione sul database callproc(nomeprocedura [,parametri]) chiama una stored procedure (disponibile solamente se il database le supporta) Linguaggi dinamici – A.A. 2009/2010 8
  • 9. Cursori Database Per qualsiasi operazione sul DB dobbiamo creare un oggetto Cursor con il metodo cursor() L'oggetto Cursor creato avrà questi metodi e attributi: rowcount attributo che contiene il numero totale di record che ha restituito l'ultima chiamata al metodo execute() close() chiude il cursore Linguaggi dinamici – A.A. 2009/2010 9
  • 10. Esempio di utilizzo con MySQL Prima di tutto si importa il modulo: import MySQLdb Poi si crea la connessione, ad esempio: conn = MySQLdb.connect (host=localhost”, user=root”, passwd=”, db=DBprova ) In questo caso: connessione ad un server MySQL che sta girando sulla stessa macchina del nostro script, sulla porta standard 3306, collegamento come utente root senza password Linguaggi dinamici – A.A. 2009/2010 10
  • 11. Esempio di utilizzo: SELECT Creiamo un oggetto di tipo cursore: cursore = conn.cursor() A questo punto possiamo lanciare una query, ad esempio: cursore.execute('SELECT * FROM frutta’) cursore.fetchall() ((1, 'Mele', 50), (2, 'Pere', 25), (3, 'Banane', 60)) Linguaggi dinamici – A.A. 2009/2010 11
  • 12. Esempio di utilizzo: SELECT NOTA: il risultato è una tupla che contiene tante tuple per ogni record recuperato (nel nostro esempio, tutti i record presenti nella tabella frutta) Notate che i dati contenuti nelle tuple sono di tipo diverso: interi, stringhe, ecc. Infatti, i tipi di dati SQL vengono, nel limite delle possibilità, tradotti in tipi equivalenti di Python Linguaggi dinamici – A.A. 2009/2010 12
  • 13. ESEMPI: selectMySQL.py Esempio di utilizzo: SELECT E’ anche possibile iterare in un ciclo for i risultati, per elaborarli Ad esempio, per formattarli in colonne: for record in cursore.fetchall(): ... print '%dt%st%d' % (record[0], record[1], record[2]) ... 1 Mele 50 2 Pere 25 3 Banane 60 Linguaggi dinamici – A.A. 2009/2010 13
  • 14. Esempio di utilizzo: INSERT Per effettuare una modifica o un inserimento: cursore.execute('INSERT INTO frutta (nome, quantita) VALUES(%s, %s)', ('Pompelmi', 10)) Come si vede, si passano due parametri al metodo: la stringa SQL di preparazione una tupla con i dati da inserire Questo metodo risulta molto potente per il trattamento veloce dei dati da inserire Indipendentemente dal tipo di dato, la query SQL completa verrà creata dal metodo execute prima di essere eseguita sul database Linguaggi dinamici – A.A. 2009/2010 14
  • 15. Esempio di utilizzo: UPDATE Allo stesso modo, è possibile effettuare un aggiornamento: cursore.execute('UPDATE frutta SET quantita= %s WHERE nome='Pere'', (5)) ATTENZIONE: alla fine delle operazioni, ricordarsi sempre di chiudere gli oggetti relativi (nell’ordine inverso in cui erano stati aperti)! Ad esempio: cursor.close () conn.close () Linguaggi dinamici – A.A. 2009/2010 15
  • 16. … e in PERL? La maggior parte dei concetti di base visti in Python per la connessione e l’utilizzo di un DBMS (connessione, preparazione ed esecuzione di statement, ecc.) sono concetti standard indipendenti dal particolare linguaggio, quindi sono validi anche per il PERL In questo caso, la API da utilizzare è DBI Per qualunque informazione: http://dbi.perl.org/ Linguaggi dinamici – A.A. 2009/2010 16
  • 17. ESEMPI: selectMySQL.pl … e in PERL? use DBI; $dbh = DBI-connect('DBI:mysql:DBProva', 'root', '' ) || die Could not connect to database: $DBI::errstr; $sql = ”SELECT * FROM frutta; $sth = $dbh-prepare($sql); $sth-execute or die SQL Error: $DBI::errstrn; while (@row = $sth-fetchrow_array) { print @rown; } … Linguaggi dinamici – A.A. 2009/2010 17