2009-05-11 5 views
0

Ich habe ein Perl-Skript, das mit einer vorhandenen Datenbank (Typ der Datenbank ist unbekannt) über das DBI-Modul, auf das ich in Python 2.6 auf WinXP zugreifen möchte.Python entspricht Perls dbi/DBD :: Proxy-Zugriff? (Perl DBI/DBD :: Proxy für Python)

Der Perl-Code ist:

use DBI; 
my $DSN = "DBI:Proxy:hostname=some.dot.com;port=12345;dsn=DBI:XXXX:ZZZZZ"; 
my $dbh = DBI->connect($DSN); 

Kann dies in einem Python Äquivalent übersetzt werden?

ein Beispiel verfolgt (Is there any pywin32 odbc connector documentation available?), ich habe folgendes zusammen:

import odbc 
DSN = "DBI:Proxy:hostname=some.dot.com;port=12345;dsn=DBI:XXXX:ZZZZZ" 
db = odbc.odbc(DSN) 

Aber ich bekomme die Fehlermeldung: dass

dbi.operation-error: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified in LOGIN 

UPDATE

Es scheint, ein anderes Perl-Modul, DBD :: Proxy stellt die tatsächliche Schnittstelle zu einer Perl-DBI :: ProxyServer (serverseitigen) Implementierung bereit, die th behandelt Die tatsächlichen Abfragen.

Kann Python verwendet werden, um mit dem Perl-basierten DBI::ProxyServer zu kommunizieren?

http://metacpan.org/pod/DBD::Proxy

http://hell.org.ua/Docs/oreilly/weblinux/dbi/ch08_02.htm

+0

Wird der gleiche Perl-Code auf demselben Windows-Computer ohne Fehler ausgeführt? –

+0

Gute Frage. Ich arbeite daran, DBI zu installieren, was ein weiteres Problem ist. – monkut

+3

Beide ActiveState- und Strawberry Perl-Windows-Distributionen haben DBI mit ihnen gebündelt. –

Antwort

5

Ihr Python-Skript muss nicht eine Zeile für Zeile Übersetzung Ihrer Perl-Skript sein.

Warum nicht einfach das Python DB-API kompatible Modul für die Datenbank verwenden, auf die Sie zugreifen möchten? Verwenden Sie für MySQL MySQLdb. Verwenden Sie für PostgreSQL PyGreSQL.

suchen Google für "YourDatabaseName + Python"

+0

-1: "muss keine Zeile-für-Zeile-Übersetzung sein" sollte "keine Zeile-für-Zeile-Übersetzung sein". –

+0

Was passiert, wenn ich die Backend-Datenbank nicht kenne? (Ich könnte verschiedene Module ausprobieren). Erkennt das Perl DBI-Modul die Backend-Datenbank auf magische Weise aus dem gegebenen $ DSN-Wert? – monkut

+0

Eine Datenbank kann nie ganz allgemein konsultiert werden ... Ports, Verbindungsprotokolle, SQL-Syntax ... alles etwas anders. Die Python DB-API bietet eine gemeinsame Schnittstelle, die jeder Datenbanktreiber implementieren sollte, damit die Grundlagen so konsistent wie möglich sind. Perls DBI ist das gleiche ... eine Indirektionsebene, die entworfen wurde, um die Bibliotheken jedes DBs (und DB-Treibers) zu isolieren. –

0

sqlalchemy ist sehr schön.

+0

Kann sqlalchemy Schnittstelle mit einem Perl DBI :: ProxyServer? – monkut

+0

Warum in aller Welt möchten Sie, dass ein Python-DB-Framework in ein Perl-DBI-Konstrukt integriert wird, zumal es in Python vollkommen funktionsfähige Datenbankschnittstellen gibt? –

+0

Entschuldigung ich habe die Frage eindeutig missverstanden. – si28719e