2017-04-24 3 views
0

Ich wurde beauftragt, ein Python-Skript zu erstellen, das unter anderem eine Liste von Geräten aus einer Oracle-Datenbank erhält und auf jedem Gerät eine Verarbeitung durchführt. Der Großteil davon ist einfach. Wenn ich ein Problem habe, stelle ich eine Verbindung zur Oracle-Datenbank her.Oracle DB-Verbindung funktioniert in Perl, wie in Python duplizieren?

Ich habe ein Perl-Skript, das funktioniert, um eine Verbindung mit der gleichen Datenbank herzustellen, aber ich kann das nicht in den entsprechenden Python-Code übersetzen.

Einige Details ...

Perl-Module, die in Gebrauch sind, sind:

DBI 
DBD::Oracle 

Python-Modul Ich benutze ist:

cx_Oracle 

Perl ist Version 5.8.8 und Python ist Version 2.7.2. Dies läuft alles auf einer CentOS Linux Box. Die Oracle-Datenbank befindet sich nicht auf dem lokalen Host.

Hier ist der entsprechende Perl-Code, der funktioniert. Der Benutzername/das Passwort wurde geändert, um Unschuldige zu schützen.

sub dbConn($$$) { 
    # Set Oracle enviroment path information 
    $ENV{"LD_LIBRARY_PATH"} = "/usr/lib/oracle/11.2/client64/lib";    
    $ENV{"NLS_LANG"}  = "ENGLISH_CANADA.AL32UTF8";            
    $ENV{"ORACLE_HOME"}  = "/usr/lib/oracle/11.2/client64";     
    $ENV{"PATH"}   = "/usr/lib/oracle/11.2/client64/bin:".$ENV{"PATH"}; 

    # Get parameters passed to subroutine  
    my $db_pass  = shift(); 
    my $db_database = shift(); 
    my $SID   = shift(); 

    # Connect to db 
    my $odbh = DBI->connect("DBI:Oracle:$SID", 
    $db_database, 
    $db_pass, 
    { 
     RaiseError => 1, 
     PrintError => 1, 
     AutoCommit => 0 
    } 
) || die("FATAL ERROR:Unable to connect to the Database: $DBI::errstr"); 

    # Return our database handle 
    return ($odbh); 



sub dbDisco($) { 

    # Get parameter passed to subroutine  
    my $odbh = shift(); 

    # Disconnect from DB 
    $odbh->disconnect; 
} 



sub loadDevices { 

    # Connect to database 
    my $odbh = dbConn("password", "username", "ENGPRD"); 

    # Get device list 
    my @devices = dbGetDevices($odbh); 

    # Disconnect from FDB 
    dbDisco($odbh); 

    return (@devices); 
} 

Sie werden bemerken, dass der Host nicht hier angegeben wird, aber Perl kann immer noch in der Datenbank finden und verbinden.

Wie kann ich herausfinden, welchen Host (IP?), Port usw. das Perl-Skript verwendet? Wie kann ich die Perl dbConn-Funktion in Python duplizieren?

Jeder Einblick wird geschätzt.

+0

Der Host usw. als Argumente übergeben wird dazu beitragen, wenn das Unterprogramm aufgerufen wird. Für Python siehe http://stackoverflow.com/questions/372885/how-do-i-connect-to-a-mysql-database-in-python – Pradeep

+0

Danke. Mein größtes Problem ist jedoch, dass ich den Host nicht kenne. Perl scheint es nicht zu brauchen. Es verwendet 'DBI: Oracle: ENGPRD', um die Verbindung herzustellen. Wie würde ich dies auf einen Host für die Verwendung in Python übersetzen? – Calab

Antwort