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

Fla*_*air 5 python sql oracle django django-oracle

尝试通过settings.py连接到Oracle DB

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.oracle', 
        'NAME': 'Hostname:Port/Service name not SID',  
        'USER': 'Username',                      
        'PASSWORD': 'Password',                                     
    }
}
Run Code Online (Sandbox Code Playgroud)

根据我在网上找到的信息,这应该是如果没有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)
Run Code Online (Sandbox Code Playgroud)

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

小智 0

尝试这个。

设置.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")
    }
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

当我的密码包含“@”时,我遇到了问题