2009-05-11 14 views
0

J'ai un script Perl qui s'interface avec une base de données existante (le type de base de données est inconnu) via le module DBI, auquel je voudrais accéder en python 2.6 sur WinXP.Equivalent Python de dbi/DBD :: Accès par proxy? (Perl DBI/DBD :: Proxy pour Python)

Le code Perl est:

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

peut-il être traduit en un équivalent python?

Après un exemple à (Is there any pywin32 odbc connector documentation available?), je l'ai mis en place les éléments suivants:

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

Mais je reçois l'erreur:

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

MISE À JOUR

Il semble que un autre module Perl, DBD :: Proxy fournit l'interface réelle à une implémentation Perl DBI :: ProxyServer (côté serveur) Les requêtes réelles.

Peut-on utiliser Python pour s'interfacer avec le DBI::ProxyServer basé sur Perl?

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

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

+0

Le même code Perl s'exécute-t-il sur la même machine Windows sans erreur? –

+0

Bonne question. Je travaille à l'installation de DBI, ce qui est un autre problème. – monkut

+3

Les distributions Windows ActiveState et Strawberry Perl sont fournies avec DBI. –

Répondre

5

Votre script python ne doit pas être une ligne de traduction en ligne de votre script Perl.

Pourquoi ne pas simplement utiliser le module compatible Python DB-API pour la base de données à laquelle vous voulez accéder? Pour MySQL, utilisez MySQLdb. Pour PostgreSQL, utilisez PyGreSQL.

Ou chercher Google pour "votre_nom_base_de_données + python"

+0

-1: "ne doit pas être une traduction ligne par ligne" devrait être "ne peut pas être une traduction ligne par ligne". –

+0

Que faire si je ne connais pas la base de données principale? (Je suppose que je pourrais essayer différents modules). Est-ce que le module Perl DBI trouve par magie le backend db à partir de la valeur $ DSN donnée? – monkut

+0

Une base de données ne peut jamais être consultée de façon entièrement générique ... les ports, les protocoles de connexion, la syntaxe SQL ... tous légèrement différents. L'API DB de Python fournit une interface commune que le pilote de chaque base de données doit implémenter afin que les bases soient aussi cohérentes que possible. DBI de Perl est le même ... une couche d'indirection conçue pour isoler les bibliothèques de chaque DB (et DB-driver). –

0

sqlalchemy est assez agréable.

+0

L'interface sqlalchemy peut-elle être utilisée avec Perl DBI :: ProxyServer? – monkut

+0

Pourquoi diable voudriez-vous intégrer un framework Python DB à une construction perl DBI, d'autant plus qu'il existe des interfaces de base de données parfaitement fonctionnelles en Python? –

+0

désolé j'ai clairement mal compris la question. – si28719e

Questions connexes