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.
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
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