django.db.utils.DatabaseError:ORA-12154:TNS:无法解析指定的连接标识符

时间:2016-07-21 21:52:56

标签: python sql django oracle django-oracle

尝试通过settings.py

连接到Oracle DB
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.oracle', 
        'NAME': 'Hostname:Port/Service name not SID',  
        'USER': 'Username',                      
        'PASSWORD': 'Password',                                     
    }
}

根据我在网上找到的内容,如果我没有SID,那应该是我通过服务名称连接到Oracle DB的方式。但我仍然收到错误django.db.utils.DatabaseError: ORA-12154: TNS:could not resolve the connect identifier specified

如果我放弃将这些详细信息放在settings.py中,我只使用cx_Oracle提供的连接字符串,

dsn_tns = cx_Oracle.makedsn('Hostname', 'Port', 
                             service_name='Service name not SID')
connection = cx_Oracle.connect('Username', 'Password', dsn_tns)

我连接得很好。是否有新语法连接到settings.py的服务名称?如果我可以通过连接字符串进行连接,那么尝试通过settings.py进行连接是否有意义?

1 个答案:

答案 0 :(得分:0)

试试这个。

settings.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

EHS_CONF_PATH = os.path.join(BASE_DIR, 'arquivo.conf')
DATABASES = {
    'default': {
        'ENGINE': os.environ['DB_ENGINE'],
        'NAME': os.environ['DB_NAME'],
        'HOST': os.environ.get('DB_HOST', 'localhost'),
        'PORT': os.environ.get('DB_PORT', '1521'),
        'USER': os.environ.get('DB_USER', 'user'),
        'PASSWORD': os.environ.get('DB_PASS', "pass")
    }
}

arquivo.conf

DB_NAME=XE
DB_USER=user
DB_PASS=pass
DB_HOST=10.7.0.140 <-- ip host
DB_PORT=1521
DB_ENGINE=django.db.backends.oracle

我的密码包含在&#39; @&#39;

时出现问题