解决报错:cx_Oracle.DatabaseError: listener does not currently know of SID given in connect descriptor

在使用Django连接Oracle数据库时,遇到报错:

cx_Oracle.DatabaseError: ORA-12505: TNS:listener does not currently know of SID given in connect descriptor

在网上查找了很多方法,都没能解决,后来在一遍连接教程中设置连接参数的描述中找到了答案:

如果数据库的tnsnames.ora文件的网络配置中设置了SERVICE_NAME,那么在settings.py文件中设置数据库连接参数时,

就不能同时设置NAME属性和HOST以及PORT属性,也就是下面这种做法:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.oracle',
        'NAME': 'oratest1',# 这里如果指定了数据库的NAME,也就是nsnames.ora文件中的SERVICE_NAME,那么下面的HOST以及PORT就需要注释掉
        'USER': 'aaaaa',
        'PASSWORD': 'xxxxx',
        #'HOST': 'oratest1.******.com',# 这行需要注释掉
        #'PORT': '1521'# 这行也需要注释掉
    }
}
ORATEST1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oratest1.******.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oratest1) # 这里设置的连接数据库的SERVER_NAME
    )
  )

验证是否连接成功:

在PyCharm的Terminal终端下输入以下命令:(如果没有任何报错则表明连接成功)

(venv) D:\PythonTest\DJ>python manage.py shell
>>> from django.db import connection
>>> con = connection.cursor()
>>> con.close()
>>>

解决报错:cx_Oracle.DatabaseError: listener does not currently know of SID given in connect descriptor_第1张图片

附:

开发环境:

Python版本:Python 3.6.3 - 64bit

Oracle版本:Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

PL/SQL版本:PL/SQL Release 11.2.0.4.0 - Production

cx_Oracle版本:6.2.1

Django版本:2.0.4

你可能感兴趣的:(Django,Django,Python,Oracle,cx_Oracle,tnsnames.ora)