La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

BIOINFO3 - Lezione 341 INTERAZIONE CON UN SERVER MYSQL Quando abbiamo parlato dei database relazionali SQL vi avevo già accennato che linterazione (invio.

Presentazioni simili


Presentazione sul tema: "BIOINFO3 - Lezione 341 INTERAZIONE CON UN SERVER MYSQL Quando abbiamo parlato dei database relazionali SQL vi avevo già accennato che linterazione (invio."— Transcript della presentazione:

1 BIOINFO3 - Lezione 341 INTERAZIONE CON UN SERVER MYSQL Quando abbiamo parlato dei database relazionali SQL vi avevo già accennato che linterazione (invio di comandi e ricezione di risultati) poteva avvenire in due modi: Direttamente attraverso un client interprete di comandi. Ed è quanto abbiamo fatto finora a lezione e nelle esercitazioni, richiedendo, dalla linea di comando UNIX, lesecuzione del client mysql. I comandi sono digitati direttamente e il programma client colloquia, attraverso la rete, con il server, utilizzando il protocollo TCP/IP (il protocollo standard per comunicare attraverso internet) Attraverso il cosiddetto embedding in un linguaggio di programmazione. In questo caso si utilizza lintermediazione di librerie del linguaggio, che permettono al programma di colloquiare con il server. Il programma chiede lesecuzione di alcune funzioni fornendo loro il comando SQL da eseguire sotto forma di stringa di testo.

2 BIOINFO3 - Lezione 342 MODULI DI PERL (es. BIOPERL) Per il Perl esiste un gran numero di librerie (dette moduli) anche per molte altre cose, ad esempio anche per la BIOINFORMATICA (il cosiddetto BIOPERL). Suggerisco a chi ne fosse interessato e alla fine del corso volesse approfondire largomento di consultare il sito www.bioperl.org. Questa libreria aggiunge al Perl la possibilità di svolgere in modo semplice le più comuni (e ripetitive) operazioni che normalmente si effettuano in programmi bioinformatici: esecuzione di programma (BLAST, PSI-BLAST, GENSCAN…), interpretazione dei risultati ed estrazione di informazioni (il cosiddetto PARSING o, italianizzato, PARSERIZZAZIONE), gestione di database di sequenze, tipicamente a flat- file, conversione tra vari formati dei dati

3 BIOINFO3 - Lezione 343 EMBEDDING DI MySQL in PERL Ma torniamo al modulo di Perl per MySQL. Per avvalersi di questa libreria, che aggiunge al linguaggio alcune funzioni per interagire con server MySQL è necessario utilizzare listruzione: use Mysql; Molti moduli vengono già distribuiti insieme al Perl, altri si possono installare successivamente, scaricandoli dal sito di chi li ha realizzati. Bisogna precisare che i moduli non vanno a modificare il linguaggio aggiungendo nuove istruzioni, ma utilizzano degli strumenti evoluti forniti dal linguaggio stesso (abbiamo già accennato a funzioni o ad esempio utilizzando la programmazione ad oggetti, di cui però non parleremo in questo corso)

4 BIOINFO3 - Lezione 344 CONNESSIONE AL SERVER Una volta dichiarato che si intende usare la libreria del Perl per MySQL è necessario collegarsi al server MySQL desiderato ed a un database specifico gestito dal server. Listruzione è del tipo Mysql->connect(server,database,user,password); Server. Lindirizzo del server. Ad esempio nelle esercitazioni avete usato e userete sibilla.cribi.unipd.it. Si può scrivere semplicemte sibilla se il programma verrà eseguito in un computer della sottorete in cui il server sibilla è conosciuto. Se invece il programma gira in un computer fuori dalla sottorete si deve indicare lindirizzo completo sibilla.cribi.unipd.it o anche lindirizzo IP (147.162.3.226). Se il programma è sulla stessa macchina che ospita il server si può usare localhost. Database. Il nome del database (es. btbm-1). User e password. Questi vengono decisi dallamministratore del database per consentire laccesso al database solo agli utenti autorizzati. Nel nostro caso non sono stati definiti per cui si usa in entrambi i casi

5 BIOINFO3 - Lezione 345 CONNESSIONE AL SERVER Listruzione di connect restituisce un puntatore al database che dovrà essere assegnato ad una variabile per poter successivamente operare con quel database. E possibile aprire più connessioni contemporaneamente a database diversi (anche su server diversi) ed ovviamente in ciascun caso si farà riferimento ad una variabile diversa. $db=Mysql->connect(sibilla,test,,); $db2=Mysql->connect(sibilla,btbm-2,,);

6 BIOINFO3 - Lezione 346 CONNESSIONE AL SERVER Vediamo un esempio di connessione fallita… In questo caso non esisteva il database test20 sul server cronos!

7 BIOINFO3 - Lezione 347 CONNESSIONE AL SERVER … ed una connessione riuscita. In questo caso il programma non muore con listruzione die, ma stampa il valore della variabile $db, giusto per farvi vedere come essa viene gestita internamente dal Perl. Il numero è un indirizzo di memoria ove il programma organizza in una struttura dati opportuna (oggetto) tutte le informazioni che gli servono per gestire questa connessione.

8 BIOINFO3 - Lezione 348 OPERAZIONI SUL DATABASE Avendo a disposizione la variabile che rappresenta la connessione con il DB ora è possibile inviare al database qualunque comando SQL semplicemente scrivendolo in una stringa ed invocando la funzione query su quella variabile, usando tale stringa come parametro $db->query(…comando SQL…); Ad esempio le istruzioni $query=insert into enzimir values(EcoRI,GAATTC,1); $db->query($query); effettuano linserimento di un record nella tabella enzimir. Il procedimento è identico per le istruzioni di update e delete.

9 BIOINFO3 - Lezione 349 OPERAZIONI DI SELECT Finora abbiamo visto le operazioni di SQL che non restituiscono risultati. Vediamo cosa succede con loperazione di select, che invece restituisce una tabella di risultati, formata in generale da diverse righe. $q=select * from enzimir; $r=$db->query($q); Tutte le righe di risultato restituite dal server sono assegnate alla variabile $r, che sarà a sua volta un puntatore ad una zona di memoria dove Perl gestirà opportunamente questo oggetto complesso. Non dovrete assolutamente preoccuparvi del valore di $r, così come di quello di $db, che, ripeto, sono gestiti dal Perl, ma semplicemente usare questa variabile nel modo che tra poco vedremo. $r

10 BIOINFO3 - Lezione 3410 RISULTATO DI UNA SELECT Ancora il valore è un puntatore ad un oggetto (struttura dati complessa) contenuta ad un certo indirizzo di memoria

11 BIOINFO3 - Lezione 3411 ESTRAZIONE DEI RISULTATI I risultati vengono estratti dalla variabile $r usando una funzione chiamata fetchhash. Ogni volta che viene invocata questa funzione restituisce la riga successiva di risultati. Quindi la prima volta che viene chiamata, fetchhash restituisce la prima riga di risultati, la seconda volta la seconda riga e così via fino allultima riga. La funzione fetchhash restituisce in un array associativo (ancora loro…) la riga di risultati. Larray associativo ha come chiavi i nomi delle colonne della tabella restituita dalla query e come valori i valori corrispondenti in quella riga. %f=$r->fetchhash; nomesitotagliosequenza EcoRIGAATTC1 %f

12 BIOINFO3 - Lezione 3412 CICLO DI ESTRAZIONE RISULTATI Tipicamente si effettua un ciclo per estrarre tutte le righe di risultati while (%f=$r->fetchhash;){ #UTILIZZO DELLA RIGA CORRENTE DI RISULTATI (%f) } Il ciclo continua fino a quando la fetchhash riesce ad estrarre righe di risultati da $r assegnandole a %f. Se la select non restituisce nessuna riga non si entra nemmeno nel while. Esaurite le righe di risultati la fetchhash restituisce un array associativo vuoto a %f e pertanto la condizione %f che controlla il while diventa falsa, facendolo terminare.

13 BIOINFO3 - Lezione 3413 Notare come ad ogni ciclo venga estratta una riga diversa dei risultati. Nellultimo ciclo la fetchhash resituisce un array associativo vuoto che fa terminare il while

14 BIOINFO3 - Lezione 3414 Join di tabelle select orfconsensus.name, orfconsensus.chromStart, orfconsensus.chromEnd, orfannotation.description from orfconsensus, orfannotation where orfconsensus.name='PBPRA0671' and orfconsensus.name=orfannotation.name $q=select orfconsensus.name as name, orfconsensus.chromStart as Start, orfconsensus.chromEnd as End, orfannotation.description as description from orfconsensus, orfannotation where orfconsensus.name='PBPRA0671' and orfconsensus.name=orfannotation.name; $r=$db->query($q); while(%f= $r->fetchhash){ $nome=$f{name}; $Start=$f{Start}; $End=$f{End}; $Description=$f{description}; }

15 BIOINFO3 - Lezione 3415

16 BIOINFO3 - Lezione 3416 ESEMPIO Si vuole scrivere un programma Perl eseguito via WEB (CGI) che stampi in una tabella HTML tutti i record della tabella degli enzimi di restrizione

17 BIOINFO3 - Lezione 3417 ESEMPIO

18 BIOINFO3 - Lezione 3418 ESEMPIO Vediamo cosa succede se il programma non trova server o database

19 BIOINFO3 - Lezione 3419 ESEMPIO Proviamo a scrivere anche una pagina web da cui richiamare, clickando su un link ipertestuale, lesecuzione della pagina

20 BIOINFO3 - Lezione 3420 RIEPILOGO Moduli (librerie) del Perl Embedding di MySQL in Perl


Scaricare ppt "BIOINFO3 - Lezione 341 INTERAZIONE CON UN SERVER MYSQL Quando abbiamo parlato dei database relazionali SQL vi avevo già accennato che linterazione (invio."

Presentazioni simili


Annunci Google