dbi
DESCRIPTION
Tema: DBICurso de Perl avanzado Barcelona.pm 2012TRANSCRIPT
DBI
¿Qué es?
• Database independent interface
– ODBC
– JDBC
¿Qué es?
• Acceso común a bases de datos– mysql_connect($server, $username,
$password)
– pg_connect($connection_string,
$connect_type)
– db2_connect($database, $username,
$password)
DBI->connect($dsn, $user, $pass)
Conceptos
• DBD -> DataBase DriverCada driver se encarga de “hablar” con la DB
• DSN -> Data Source NameCadena de conexión
• DBH -> Database handlerRepresenta una conexión a una base de datos
• STH -> Statement handlerRespresenta una sentencia SQL
Conectar a una base de datos
use DBI;
my $dbh = DBI->connect(“dbi:DRIVER:PARAM1=VALOR1;PARAM2=VALOR2”, $user, $pass, $dbi_opts);
…
$dbh->disconnect;
DRIVER: mysql, SQLite, Pg…
PARAMX=VALORX: en la doc del driver ;)
Recomendación:
{ „RaiseError‟ => 1, „PrintError‟ => 0, „AutoCommit‟ => 0 } en $dbi_opts
Ahora que tengo una conexión
my $sth = $dbh->prepare(„INSERT INTO tabla
(nombre, apellidos) VALUES (?, ?)‟);
$sth->execute(„Larry‟, „Wall‟);
$sth->finish;
$dbh->do(„INSERT…‟, undef, „Larry‟, „Wall‟);
Ahora que tengo una conexión
my $sth = $dbh->prepare(„INSERT INTO tabla
(nombre, apellidos) VALUES (?, ?)‟);
while (…) {
$sth->execute($name, $lastname);
}
$sth->finish;
¿Qué son los interrogantes?
Bind Params
• http://xkcd.com/327/
Recuperando Datos
my $sth = $dbh->prepare(„SELECT * FROM tabla
WHERE nombre = ?‟);
$sth->execute(„Larry‟);
FETCH
$sth->finish;
Fetching…
selectrow_array
selectrow_arrayref
selectrow_hashref
selectall_arrayref
selectall_hashref
Recuperando Datos
my $sth = $dbh->prepare(„SELECT * FROM tabla WHERE
nombre = ?‟);
$sth->execute(„Larry‟);
while (my $row = $sth->fetchrow_hashref){
say “$row->{„nombre‟} $row->{„apellido‟}”;
}
$sth->finish;
DBDs Interesantes
• DBD::mysql
• DBD::sqlite
• DBD::Pg
• DBD::Oracle
• DBD::CSV
• …
DBD curiosos
• DBD::iPod
• DBD::Salesforce
• DBD::RDFStore
• DBD::Proxy
• …