Frage

Ist CPAN DBI die beste Datenbankschnittstelle für die Verwendung in Perl für den allgemeinen Datenbankgebrauch?Gibt es bessere Optionen?

War es hilfreich?

Lösung

Wenn Sie nur nach einem Low-Level-Datenbankzugriff suchen – Sie füttern ihn mit einer beliebigen SQL-Zeichenfolge (optional mit Platzhaltern und Bind-Werten) und er führt Ihre Abfrage aus und gibt Ihnen die Ergebnisse zurück – dann ja, DBI ist bei weitem die beste Wahl.

Wenn Sie eine Schnittstelle auf höherer Ebene wünschen (d. h. eine, die wenig oder gar keinen Einsatz von Roh-SQL in Ihrem Code erfordert), dann gibt es mehrere ORMs (Objektrelationale Mapper) für Perl verfügbar.Besuche die ORM Weitere Informationen und Links finden Sie auf der Seite im Perl 5-Wiki der Perl Foundation.(Wenn Sie Hilfe bei der Auswahl benötigen oder spezifische Fragen haben, können Sie den Fokus dieser Frage eingrenzen oder vielleicht eine andere posten.)

Andere Tipps

DBI ist die „Low-Level“-Schnittstelle zwischen Perl und einem DBMS.Es ist so ziemlich die einzig realistische Möglichkeit, dies zu tun.Vergleichbar mit JDBC in Java.Es wäre verrückt (oder Sie hätten einen ganz bestimmten Anwendungsfall), etwas anderes als DBI für Ihre Low-Level-Schnittstelle zwischen Perl und einer Datenbank auszuwählen.

Zusätzlich zu DBI gibt es verschiedene objekt-/relationale Mapper, die die Arbeit mit einer Datenbank viel einfacher und sauberer machen.

Einige der gebräuchlichsten/beliebteren sind

Wenn Sie sich für die Verwendung von Plain entschieden haben DBI Für eine Aufgabe, die kein ORM benötigt, empfehle ich dringend, dass Sie sich ansehen DBIx::Simple.

Es ist kein Ersatz, sondern eine sehr gut gestaltete API darüber hinaus DBIDas macht einfache und komplexe Dinge möglich, ohne die Flexibilität zu verlieren DBI.

Haben Sie jemals festgestellt, dass Sie scheinbar einfache Dinge im Internet nachschlagen müssen? DBIDokumentation, wie das Ergebnis der Ergebnisse einer Abfrage als ArrayRef (Zeilen) von Hashes (Spalten und deren Werte)?Mit DBIx::Simple das ist ganz einfach:

# 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!

Werfen Sie einen Blick auf die Beispiele für mehr.Auch die Integration mit SQL::Abstract macht einfache Abfragen zum Kinderspiel.Es verwendet es in meinem gesamten Code, wo ich es verwendet hätte DBI Vorher, und ich schaue nicht zurück.

Es ist erwähnenswert, dass die überwiegende Mehrheit der „höheren“ Schnittstellen (wie SQL::Abstract) und (DBIx::Simple) DBI selbst verwenden, wenn sie die Abfragen tatsächlich ausführen.DBI ist so ziemlich die akzeptierte Standardmethode für Datenbankverbindungen in Perl.

Wenn Sie mit Objekten arbeiten möchten (mit Selbstbeobachtung!), werfen Sie einen Blick auf Fey::ORM, das ORM basierend auf Moose implementiert.Es hat auch eine sehr SQL-ähnliche Syntax, sodass es etwas besser zu meinem RDBMS-basierten Gehirn passt als einige andere ORM-Frameworks.

Schauen Sie mal vorbei Klasse::DBI sowie.

Meiner Meinung nach ist DBI eine wirklich gute Wahl.Ich habe DBD::mysql aktiv genutzt und fand, dass es eine wirklich gute Lösung ist.

Auch wir nutzen das DBI-Modul in all unseren Projekten.Oft erstellen wir darauf ein benutzerdefiniertes Paket für die spezifische Anwendung, aber darunter befindet sich das DBI-Kernmodul.Und oft ist es einfach einfacher, die Funktionen des DBI-Moduls direkt zu nutzen.

DBI ist großartig, aber die Qualität der DBD-Module kann variieren.Ich wurde von einer „Funktion“ in einer der Versionen von DBD:pg gebissen.Es wurde bevorzugt, die vollständigen Daten Ihres Ergebnisses in den Speicher zu laden, anstatt mit Cursorn darüber zu interagieren.

Wie immer – Vorbehalt, Programmierer.

DBI rockt!Aber für ein richtiges ORM mit vollem Funktionsumfang, das schnell ist, sollten Sie sich immer für DBIx::Class entscheiden.

Grundsätzlich sollten Sie es gewohnt sein, zunächst nur DBI zu verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top