DBI -- kratke info
Honza Pazdziora
adelton na informatics.muni.cz
Neděle Březen 15 22:33:08 MET 1998
Dobry den,
pred nejakou dobou jsem sem fwdoval text o DBI a dostal jsem nekolik
reakci, ze by bylo dobre rici, co to vlastne to DBI je.
DBI (database interface) je specifikace definujici zpusob, jak v Perlu
pracovat s databazemi. Databazi je mnoho a maji ruzne funkce a moznosti.
DBI definuje metody, ktere pristup k temto ruznym databazim sjednocuji,
protoze koneckoncu, jsou to jenom radky a sloupce tabulek a my se
chceme dostat k jejich polozkam. Zaroven ale DBI take dovoluje pouzit
funkce, ktere jsou specialitou jedne databaze/jednoho vyrobce.
Vetsina databazi prichazi s nejakym API, pomoci ktereho s ni muzeme
komunikovat i jinak nez radkovym klientem na SQL dotazy. Typicky
muzeme napsat Ceckovy program, ktery udela pozadovanou operaci.
Abychom se nemuseli zabyvat ruznymi API ruznych databazi, zastresuje
je DBI urcitou mnozinou danych funkci. Ty zahrnuji napriklad
connect, prepare, execute, fetchrow_array, fetchrow_hashref
Aby se tyto funkce dokazaly bavit s databazi, potrebujeme k ni DBD,
database driver. To je Perlovsky modul s Ceckovou dynamicky linkovanou
knihovnou (nejcasteji), ktery prevede obecne volani DBI metod
(napriklad connect) na konkretni volani v danem API dane databaze.
Jeho ukolem je ale napriklad take prevadet databazove NULL hodnoty na
undef, atp.
DBD najdeme na CPANu v modules/by-module/DBD. Jsou to baliky, ktere je
potreba zkompilovat proti databazi a pri nainstalovanem modulu
DBI. Protoze se modul obraci primo na databazi, je casto nutne mit
zakoupenu vyvojarskou podporu pro databazi, aby bylo mozne modul
zkompilovat, napriklad pro Informix to je ESQL/C. Bez moznosti
kompilace nevytvorime dynamickou knihovnu a DBI nebude mit, jak se
s databazi bavit. Jednou zkompilovany modul muzeme pouzit na
libovolnem stroji, kde existuje dana databaze a kde je stejny HW/OS.
Metody, ktere DBI definuje, slouzi k vydani SQL dotazu (prepare,
execute) a nacteni pripadnych vysledku (napriklad fetchrow_array,
samozrejme pouze pro SELECT). Pokud tedy ve svych skriptech pouzijeme
nejaky rozumny standard SQL, jsme schopni prevest skript z jedne
databaze na jinou pouhou zmenou typu databaze v parametru volani
connect. Samozrejme za predpokladu, ze na tu novou databazi mame
zkompilovany DBD.
Velice uzitecnym se DBI ukaze v pripade, ze chceme pristupovat ke
vzdalene databazi, ale nemame koupenou sitovou podporu nebo sitova
podpora neni pro nas system k dispozici. Existuje totiz DBD::pNET,
ktery funguje jako proxy: my na klientske strane vydame prikaz, ten je
po siti predan pDBDagentovi, ktery bezi na stroji, kde je take
databaze, a vysledky jsou potom poslany zpet. Funguje mi takto
napriklad pristup z Linuxu na Solaris s Informixem.
Doufam, ze tato zakladni informace alespon nekomu pomuze. Manove
stranky jak k DBI, tak k jednotlivym modulum popisuji jednak metody,
ktere mame pri pouziti DBI k dispozici, jednak vlastnosti
(a zvlastnosti) jednotlivych modulu, vetsinou v zavislosti na databazi,
nad kterou pracuji.
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
I can take or leave it if I please
------------------------------------------------------------------------
Další informace o konferenci Perl