Perl Database Interface (DBI)
Document Sample


Perl Database Interface (DBI)
¨
Thorsten Huber, Hendrik Bruckner
Berufsakademie Stuttgart
Agenda
Perl – Eine kurze Einführung
Was ist Perl DBI? – Grundlagen
Konzept & Architektur
Beispiel: Abfrage mit Perl DBI
DBI Programmierung
Connection
Query
Transaction
DBI in der Praxis
Praktische Übung
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 2
Practical Extraction and Reporting Language
Introduction
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 3
Perl Introduction
Perl – Die Scriptsprache
Sprache:
Kontextsensitive Interpretersprache
Objekt-Orientiert (seit Perl ≥ 5)
Plattformunabhängig
Anwendung:
Textmanipulation
System Administration
Web Development
Network Programming
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 4
Perl Introduction
Perl – Variablen und Datentyp
Perl besitzt 3 bedeutende Datentypen:
Scalar: Zahlen und Zeichenfolgen
$var = "skalarer Inhalt" ;
List (Array): Liste von Scalars
@list = ( 123, ’ ele1’ , ’ ele2’ );
Hash: Struktur von Key-/Value-Pairs
%myHash = ( ’key1’ => val1, ’key2’ => 123 );
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 5
Perl Introduction
Perl – Variablen und Kontext
Wert der Variable abhängig vom Kontext der Umgebung
Mögliche Kontexte sind:
Void Context
Scalar Context
List Context
Hash Context, Boolean Context, . . .
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 6
Perl Introduction
Perl – Regul¨ Ausdrucke
are ¨
Textverarbeitung in Perl – Reguläre Ausdrücke
Beispiel: Umwandlung von Klein- zu Großbuchstaben
$text =~ tr /a−z/A−Z/;
Beispiel: CVS Revision
$version = do { my @r = (q$Revision: 1.6 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
Beispiel: CGI URL Decoding
$value =~ s/%([\dA−Fa−f][\dA−Fa−f)/pack( "C", hex( $1 ) )/eg;
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 7
Perl DataBase Interface
Introduction
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 8
DBI Introduction Was ist Perl DBI?
Was ist Perl DBI?
Perl DataBase Interface
Datenbank-unabhängige Programmierschnittstelle
Perl Modul DBI
Sammlung von Database Drivers (DBD)
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 9
DBI Introduction Was ist Perl DBI?
Vorteile von Perl DBI
Unabhängigkeit
Perl und DBI sind für viele Plattformen verfügbar
Unterstützung einer Vielzahl von Datenbanken
Perl’s Stärke in der Textanalyse
Professionelle Datenanalyse und Datenselektion
Data Warehousing, Data Mining, ETL
Web Anwendungen
Dynamische Web Anwendungen mit CGI
Apache Webserver Integration
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 10
DBI Introduction DBI Architektur
DBI Komponenten
DBI besteht aus zwei Software-Komponenten:
Database Interface
Database Independent
Schnittstelle zwischen Perl Script und Database Driver
Database Drivers
Database Dependent
Kommunikation mit dem Datenbank
Managementsystem
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 11
DBI Introduction DBI Architektur
DBI Architektur
DBI Driver
DB2 UDB
DBD::DB2 ORDBMS
Oracle
DBD::Oracle RDBMS
Perl
DBI DBD::Pg PostgreSQL
Script ORDBMS
Flat
DBD::CSV
File
DBD::Google SOAP
WSDL
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 12
DBI Introduction DBI Architektur
DBI Database Drivers
Database Drivers
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 13
DBI Introduction DBI Architektur
DBI Database Drivers
DBD::Oracle DBD::DB2 DBD::Informix
Database Drivers
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 13
DBI Introduction DBI Architektur
DBI Database Drivers
DBD::Oracle DBD::DB2 DBD::Informix
Database Drivers
DBD::Pg
DBD::PgSPI
DBD::mysql
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 13
DBI Introduction DBI Architektur
DBI Database Drivers
DBD::Oracle DBD::DB2 DBD::Informix
Database Drivers
DBD::JDBC DBD::Pg
DBD::PgSPI
DBD::ODBC
DBD::mysql
DBD::ADO
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 13
DBI Introduction DBI Architektur
DBI Database Drivers
DBD::Oracle DBD::DB2 DBD::Informix
Database Drivers
DBD::JDBC DBD::Pg DBD::Google
DBD::PgSPI
DBD::ODBC DBD::LDAP
DBD::mysql
DBD::ADO DBD::File
DBD::CSV
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 13
Perl DBI
Beispiel Abfrage
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 14
Perl DBI Programmierung
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 15
Perl DBI Programmierung DBI Connections
Handles
Database Handles
$datasource = "DBD:DriverName";
$dbh = DBI−>connect($datasource, ...);
Statement Handles
$sth = $dbh−>prepare("SELECT name, vorname ".
"FROM tabelle WHERE ".
" id = ?");
$rsh = $sth−>execute(2543);
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 16
Perl DBI Programmierung DBI Connections
Connection & Disconnection
Übergabe von Attributen beim Verbindungsaufbau
$dbh = DBI−>connect(
"dbi:Pg:dbname=phonebook;host=database.somedoma.in;port=5432;",
"gast" , "gast" ,{ AutoCommit => 0}
);
# Datenbankzugriffe
# ...
$dbh−>disconnect();
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 17
Perl DBI Programmierung Interacting with the Database
Query Data
Aktion ohne Rückgabewerte:
$dbh−>do("DELETE FROM person where vorname = ’Ernst’ ".
"AND name = ’Sorgenfrei’");
Prepared Statements mit Variablenbindung:
$sth = $dbh−>prepare("DELETE FROM person WHERE vorname = ? ".
"AND name = ?");
$sth−>bind_param(1,"Ernst");
$sth−>bind_param(2,"Sorgenfrei");
$sth−>execute();
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 18
Perl DBI Programmierung Interacting with the Database
Fetching Data
Auslesen von Rückgabewerten:
$sth = $dbh−>prepare("SELECT id FROM person where vorname = ? ".
"AND name = ?");
$sth−>bind_param(1,"Ernst");
$sth−>bind_param(2,"Sorgenfrei");
$sth−>execute();
while ( ( $id ) = $sth−>fetchrow_array() ){
print " id=$id\n";
}
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 19
Perl DBI Programmierung Transaktionen
Transaktionen in DBI – Voraussetzungen
Folgende Voraussetzungen müssen erfüllt sein:
Datenbank muss Transaktionen unterstützen
Deaktivierung des AutoCommit-Mechanismus
my $dbh = DBI−>connect( "dbi:Pg:dbname=phonebook", "username", "password" , {
AutoCommit => 0
} );
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 20
Perl DBI Programmierung Transaktionen
Transaktionen in DBI – commit & rollback
„Festlegen“ einer Transaktion:
$dbh−>commit();
„Zurückrollen“ einer Transaktion:
$dbh−>rollback();
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 21
Perl DBI in der Praxis
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 22
Perl DBI in der Praxis Datenbank Proxy
Datenbank Proxy – DBI::Proxy
Eigenschaften von DBI::Proxy
zusätzlicher Abstraktionslayer
eigenes Sicherheitskonzept
schlankes Protokoll
Zugriff auf Datenbanken ohne
Netzwerkfähigkeiten
Kein Datenbanktreiber auf Client notwendig
geringerer Administrationsaufwand
evtl. Einsparung von Lizenzkosten
Plattformunabhängigkeit
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 23
Perl DBI in der Praxis Datenbank Proxy
DBI::Proxy – Architektur
Architektur:
Applikation
DBI Proxy
(Netzwerkverbindung)
DBI ProxyServer
DBI Datenbanktreiber
Datenbanktreiber
(MySQL, PostgreSQL, Oracle, JDBC, ODBC, . . . )
Datenbank (lokal o. remote)
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 24
Perl DBI in der Praxis DBI & Apache
Integration in den Apache WebServer
Integration von Perl in Apache – mod_perl:
Performance Steigerung
Precompiled Perl-Scripts
Apache DBI Erweiterungen:
Authentifizierung & Autorisierung – Apache::AuthDBI
Apache::DBI
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 25
Perl DBI in der Praxis DBI & Apache
Apache::DBI – Besonderheiten
DBI in Apache bietet folgende Features:
Aufbau von Datenbank Verbindungen beim Start von
Apache
Persistente Datenbank Verbindungen
Konfigurierbares Rollback
Verifizierung von Datenbank Verbindungen
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 26
Praktische Übung
PhoneBook Query
DBI Proxy und PostgreSQL
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 27
??? F RAGEN ???
Thorsten Huber, Hendrik Bruckner
¨ Perl Database Interface (DBI) – p. 28
Related docs
Get documents about "