在Python中复制Perl Oracle数据库连接

时间:2017-04-24 03:35:03

标签: python oracle perl

我的任务是创建一个Python脚本,从Oracle数据库中获取设备列表,并在每个设备上进行一些处理。其中大部分都是直截了当的,但我遇到的问题是连接到Oracle数据库。

我有一个连接到同一个数据库的Perl脚本,但我无法将其转换为等效的Python代码。

DBIDBD::Oracle Perl模块正在使用中,我正在使用cx_Oracle Python模块。

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函数?

感谢任何见解。

1 个答案:

答案 0 :(得分:1)

SID' INGPRD'是指数据库名称和实例编号。我相信有一个Oracle tnsnames.ora文件可以识别这些。

我认为这个链接会有所帮助

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