2008-09-03 18 views

Respuesta

29

Si usted está buscando para el acceso de base de datos de bajo nivel — le da de comer cualquier cadena SQL (opcionalmente con place-holders y bind values) y ejecuta su consulta y le devuelve los resultados — entonces sí, DBI es su mejor apuesta, de lejos.

Si desea una interfaz de nivel superior (es decir, una que requiera poco o ningún uso de SQL sin procesar en su código), existen varios ORM (object-relational mappers) disponibles para Perl. Consulte la página ORM en Perl 5 wiki de Perl Foundation para obtener más información y enlaces. (Si desea ayuda para elegir entre ellos o tiene preguntas específicas, puede limitar el enfoque de esta pregunta o quizás publicar otra).

1

En mi opinión, DBI es una muy buena opción. He usado DBD :: mysql activamente y he encontrado que es una muy buena solución.

1

También utilizamos el módulo DBI en todos nuestros proyectos. Muchas veces creamos un paquete personalizado además de la aplicación específica, pero debajo está el módulo central de DBI. Y a menudo es simplemente más fácil usar las funciones del módulo DBI directamente.

18

DBI es la interfaz de "bajo nivel" entre Perl y un DBMS. Es prácticamente la única opción realista para hacerlo. Comparable a JDBC en Java. Estaría loco (o tiene un caso de uso muy específico) para elegir cualquier cosa que no sea DBI para su interfaz de bajo nivel entre Perl y una base de datos.

Además de DBI, hay varios mapeadores de objetos/relacionales que hacen que trabajar con una base de datos sea mucho más fácil y más limpio.

Algunos de los más comunes/más populares son

1

DBI es excelente, pero la calidad de los módulos DBD puede variar. Fui mordido por una 'característica' en una de las versiones de DBD: pg. Le gustaba cargar los datos completos de su resultado en la memoria, en lugar de analizarlos con los cursores.

Como de costumbre - Programa de advertencia.

3

Si desea trabajar con objetos (¡con introspección!), Eche un vistazo a Fey :: ORM que implementa ORM basado en Moose. También tiene una sintaxis similar a la de SQL, por lo que encaja mejor en mi cerebro basado en RDBMS que algunos de otros marcos ORM.

1

DBI rocks! pero para un ORM completo con todas las funciones que sea rápido, vaya a DBIx :: Class todo el tiempo.

10

Si eligió utilizar DBI para una tarea que no necesita un ORM, I le sugiero encarecidamente que consulte DBIx::Simple.

No es un reemplazo, pero una API muy bien diseñado en la parte superior de DBI que hace las cosas simples cosas simples y complejas posibles, sin perder ninguna de la flexibilidad de DBI.

¿Alguna vez se encontró que había que buscar cosas aparentemente sencillas en la documentación DBI , como conseguir los resultados de una consulta como un arrayref (filas) de hash (columnas y sus valores)? Con DBIx::Simple esto es sencillo:

# DBI 
my $rows = $dbh->selectall_arrayref($sql, { Slice => {} }); 
       # tell it we want "hashes" (yuck!) ^^^^ 

# DBIx::Simple 
my $rows = $db->query($sql)->hashes; # does the same as the above code underneath! 

Tome un vistazo a la examples por más. Además, la integración con SQL::Abstract hace que las consultas simples sean muy sencillas. Lo uso en todo mi código donde habría usado DBI antes, y No estoy mirando hacia atrás.

+0

DBIx :: Simple permite un acceso mucho más limpio a los resultados por nombre, en lugar del extraño método hash utilizado por DBI o por índice de matriz (que puede moverse si las tablas cambian de formato). –

4

Vale la pena señalar que la gran mayoría de las interfaces de "nivel superior" (como SQL :: Resumen) y (DBIx :: Simple) usan DBI en sí cuando realizan las consultas. DBI es prácticamente el método estándar aceptado para la conexión de bases de datos en Perl.

0

Básicamente, debe estar acostumbrado a utilizar DBI en primer lugar.

+0

¿Cómo responde esto la pregunta? – ImaginaryHuman072889

Cuestiones relacionadas