带有符号@的密码的Oracle连接字符串

时间:2014-09-10 14:03:26

标签: python django oracle connection-string django-oracle

我有一个使用连接字符串连接到oracle的代码:

conn = cx_Oracle.connect('username/password@server:port/services')

但问题是我的密码包含@字符,因此可能会变成

conn = cx_Oracle.connect('username/p@ssword@server:port/services')

它返回

  

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

我在这个设置中使用Django和Oracle

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.oracle', 
        'NAME': 'Services',  
        'USER': 'user',                      
        'PASSWORD': 'p@ssword',                  
        'HOST': 'ip',                      
        'PORT': 'port',                      
    }
}

我无法更改密码:(有人知道这个问题吗?

4 个答案:

答案 0 :(得分:11)

我还没有尝试过cx_Oracle,但您可以通过指定各个参数进行连接 -

conn = cx_Oracle.connect(user='username', password='p@ssword', dsn='server:port/services')

OR

dsn_tns = cx_Oracle.makedsn('server', 'port', 'services')
conn = cx_Oracle.connect(user='username', password='p@ssword', dsn=dsn_tns)

答案 1 :(得分:3)

您可以基于Service NameSID使用以下任何一种方式。

具有SID:

dsn_tns = cx_Oracle.makedsn('server', 'port', 'sid')
conn = cx_Oracle.connect(user='username', password='p@ssword', dsn=dsn_tns)

OR

具有服务名称:

dsn_tns = cx_Oracle.makedsn('server', 'port', service_name='service_name')
conn = cx_Oracle.connect(user='username', password='p@ssword', dsn=dsn_tns)

答案 2 :(得分:1)

仅供参考: 是Django中长期存在的bug。包含此修复程序的第一个稳定版本是v2.1

答案 3 :(得分:0)

这有用吗?

conn = cx_Oracle.connect('username/"p@ssword"@server:port/services')
相关问题