【发布时间】:2018-02-07 05:08:08
【问题描述】:
我想学习如何使用 Python 处理 Oracle 数据库。如果我理解正确,您可以使用 Oracle Instant Client 远程连接到 Oracle 数据库,但我无法连接。我怀疑问题是我不知道 localhost/instance 组合使用什么参数。我相信 localhost 只是我的机器名称,或者它可能是我尝试过的字面上的“localhost”,但我不知道如何也找不到帮助告诉我如何找到数据库实例的服务名称。
在提示符中,我打开 python,导入 cx_Oracle 并使用 this sample code 中指定的“Easy Connect String”,使用“(我的机器名称)/orclpdb”或字面意思是“localhost/orclpdb”作为DEFAULT_CONNECT_STRING。
示例代码创建了一个变量MAIN_CONNECT_STRING,我在命令提示符中使用它来尝试连接到远程数据库:
cnxn = cx_Oracle.connect(MAIN_CONNECT_STRING)
cx_Oracle.DatabaseError: ORA-12541: TNS:no listener
我找到的答案似乎基于this,或其他引用tnsnames.ora 或listener.ora 的文件,这些文件我没有。我也尝试过使用instantclient-sqlplus-nt-12.2.0.1.0。
背景:
- Windows 7
- 我下载了
cx_Oracle-6.1-cp27-cp27m-win32.whl和instantclient-basic-nt-12.2.0.1.0.zip - 我将
.whl放入“C:\Python27\Scripts\” - 我使用python
-m pip install cx_Oracle --upgrade安装cx_Oracle。 - 我解压了即时客户端 zip 并将子文件夹放在这里 "C:\instantclient_12_2"
- 我在
PATH的末尾添加了;C:\instantclient_12_2。
【问题讨论】:
-
从错误看来,Python 和 cx_Oracle 已安装并运行正常。只是与数据库的连接需要调整。连接到数据库时,您使用其他工具使用什么连接字符串?您的数据库的服务名称是“orclpdb”吗?如果您有权访问数据库,“lsnrctl status”之类的工具将显示服务名称。
-
是的,我的安装似乎工作正常,但我无法连接。如何确定数据库服务名称?我认为这就是问题所在。我从来没有连接到远程数据库,所以我不能使用任何那些“xxxx 状态”命令。我使用了服务名称“orclpdb”,因为它在我的问题中链接到的示例代码中给出,因为它似乎是一个应该被识别的默认值 - 就像在同一示例代码中给出的替代值:“XE” i>我认为指的是已安装数据库的默认服务名称,这是我不想要的。
-
您需要询问了解数据库的人。 'oraclepdb' 是新安装中的常见默认值。 Oracle Express Edition 使用“XE”。
-
我推测 'orclpdb' 可能是默认值,尽管我找不到任何拼写出来的内容...所以默认服务名称应该可以工作,因为我正在尝试连接到 Oracle 提供的数据库我们这些使用带有 Instant Client 的 cx_Oracle 的人,对吗?所以了解数据库的“人”是甲骨文……除非我误解了它是如何工作的。我想练习在 Oracle 数据库中实际工作,将数据加载到其中等等,我想我可以使用 Oracle 的远程数据库来做到这一点。这不正确吗?
-
知道访问 Oracle DB 的人就是安装它的人,并且在安装期间选择了默认选项,或者选择了自定义值。该人还可以帮助提供要使用的用户名和密码,以及连接字符串。
标签: python oracle instantclient