2017-04-24 32 views
0

我的任務是創建一個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函數?

任何洞察力是讚賞。

+0

主機等作爲參數調用子程序時傳遞。對於蟒蛇參考這個http://stackoverflow.com/questions/372885/how-do-i-connect-to-a-mysql-database-in-python – Pradeep

+0

謝謝。我最大的問題是,我不知道主機。 Perl似乎並不需要它。它使用'DBI:Oracle:ENGPRD'來建立連接。我如何將它轉換爲用於Python的主機? – Calab

回答