2017-04-24 5 views
0

私は、とりわけ、Oracleデータベースからデバイスのリストを取得し、各デバイスで何らかの処理を行うpythonスクリプトを作成することになっています。これの大半は簡単です。問題が発生している場所はOracleデータベースに接続しています。Oracle DBの接続は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

サブルーチンが呼び出されたときに、引数として渡されるなどのホストを支援すると思います。 pythonについては、これを参照してくださいhttp://stackoverflow.com/questions/372885/how-do-i-connect-to-a-mysql-database-in-python – Pradeep

+0

ありがとう。私の最大の問題は、私はホストを知らないということです。 Perlはそれを必要としていないようです。接続には 'DBI:Oracle:ENGPRD'を使います。これをPythonで使用するためにホストに変換するにはどうすればよいですか? – Calab

答えて

1

SID 'INGPRD'は、データベース名とインスタンス番号を指します。これらを識別するOracleのtnsnames.oraファイルがあると思います。

は、私は、このリンクは

http://www.sap-img.com/oracle-database/finding-oracle-sid-of-a-database.htm

+0

ありがとうございます!ホスト名は、tnsnames.oraファイルにあります。私は今、私のpythonスクリプトが動作している! – Calab

関連する問題