python - 无法在 Linux 上使用 python3 和 cx_Oracle 作为外部标识的用户进行连接

标签 python cx-oracle

我正在尝试编写一个简单的 python 脚本,它将作为外部识别的用户连接到我的 Oracle 数据库,然后执行一些操作。但我无法摆脱连接。

如果我在连接字符串中硬编码用户/密码,那么它连接得很好并按预期打印出数据库版本,因此连接字符串的格式必须有效

import cx_Oracle
con = cx_Oracle.connect('<user>','<password>','<service name>')
print (con.version)
con.close()

现在操作系统用户已被外部识别,如下所示:

sqlplus /

SQL*Plus: Release 11.2.0.4.0 Production on Mon Sep 24 14:28:01 2018

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage 
Management, OLAP,
Data Mining and Real Application Testing options

SQL>

因此,从我在搜索时看到的情况来看,我应该能够运行此代码进行连接:

import cx_Oracle
con = cx_Oracle.connect('','','<service name>')
print (con.version)
con.close()

但这给了我错误:

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    con = cx_Oracle.connect('','','<service name>')
cx_Oracle.DatabaseError: ORA-01017: invalid username/password; logon denied

任何人都可以帮我吗,这感觉应该很简单!

谢谢

最佳答案

你正在尝试的对我有用:

import cx_Oracle

connection = cx_Oracle.Connection('', '', 'my183')
cur = connection.cursor()

sql = "select user from dual"
for i in cur.execute(sql):
    print(i)

产品:

$ python t.py
('CJ',)

在本例中,我有一个包含以下内容的 sqlnet.ora(您需要检查设置并使用适合您的版本和环境的设置):

WALLET_LOCATION =
   (SOURCE =
     (METHOD = FILE)
     (METHOD_DATA =
       (DIRECTORY = /Users/cjones/test)
     )
   )

SQLNET.WALLET_OVERRIDE = TRUE

和一个 tnsnames.ora:

my183 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orclpdb)
    )
  )

我的 cwallet.sso 是为“my183”(用户 CJ)创建的,并且位于与 tnsnames.ora 和 sqlnet.ora 相同的目录中。我的 TNS_ADMIN 环境变量设置为该目录。

关于python - 无法在 Linux 上使用 python3 和 cx_Oracle 作为外部标识的用户进行连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52480681/

相关文章:

python - 如何根据Python列表中的文件名将图像文件排序到两个文件夹中?

python - 在 Selenium 中关闭并打开新浏览器

python - 使用python连接oracle数据库(cx_oracle)

python - 如何使用 python 和 cx_Oracle 更新 oracle 表中的列并在每次记录更新后提交

python - 如何使用 python、cx_oracle 将查询的结果集作为字典获取?

python - 试图理解 cx_Oracle 的 LOB 对象

python - python和oracle处理异常握手的正确方法

python - 尝试使用Selenium通过xpath选择元素,但出现错误“无法找到元素”

python - 在 Python 中从字符串中删除反斜杠

python - 在 argparse 中使用 GNU 风格的长选项(不要将可选参数与位置混淆)