我的任务是创建一个Python脚本,从Oracle数据库中获取设备列表,并在每个设备上进行一些处理。其中大部分都是直截了当的,但我遇到的问题是连接到Oracle数据库。
我有一个连接到同一个数据库的Perl脚本,但我无法将其转换为等效的Python代码。
DBI
和DBD::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函数?
感谢任何见解。
答案 0 :(得分:1)
SID' INGPRD'是指数据库名称和实例编号。我相信有一个Oracle tnsnames.ora文件可以识别这些。
我认为这个链接会有所帮助
http://www.sap-img.com/oracle-database/finding-oracle-sid-of-a-database.htm