【问题标题】:django.db.utils.DatabaseError: ORA-12154: TNS:could not resolve the connect identifier specifieddjango.db.utils.DatabaseError: ORA-12154: TNS: 无法解析指定的连接标识符
【发布时间】:2016-11-25 16:19:15
【问题描述】:

尝试通过 settings.py 连接到 Oracle 数据库

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 进行连接是否有意义?

【问题讨论】:

    标签: python sql django oracle django-oracle


    【解决方案1】:

    试试这个。

    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
    

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

    【讨论】:

      猜你喜欢
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      相关资源
      最近更新 更多