Perl Database Interface (DBI)

W
Document Sample
scope of work template
							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