我的任務是創建一個python腳本,其中包括從Oracle數據庫獲取設備列表並在每個設備上執行一些處理。其中大部分都很簡單。我遇到問題的地方是連接到Oracle數據庫。Oracle數據庫連接在Perl中工作,如何在Python中複製?
我有一個perl腳本,可以連接到同一個數據庫,但是我無法將其轉換爲等效的python代碼。
一些細節......
Perl模塊正在使用的是:我使用
DBI
DBD::Oracle
Python模塊是:
cx_Oracle
Perl是5.8.8版本和Python是版本2.7.2。這一切都在CentOS Linux機器上運行。 Oracle數據庫不在本地主機上。
下面是相關的perl代碼的工作。用戶名/密碼已被更改以保護無辜者。
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);
}
你會注意到這裏沒有指定主機,但是perl仍然可以找到並連接到數據庫。
如何找出perl腳本正在使用的主機(IP?),端口等?我如何複製python中的perl dbConn函數?
任何洞察力是讚賞。
主機等作爲參數調用子程序時傳遞。對於蟒蛇參考這個http://stackoverflow.com/questions/372885/how-do-i-connect-to-a-mysql-database-in-python – Pradeep
謝謝。我最大的問題是,我不知道主機。 Perl似乎並不需要它。它使用'DBI:Oracle:ENGPRD'來建立連接。我如何將它轉換爲用於Python的主機? – Calab