我有一个使用连接字符串连接到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',
}
}
我无法更改密码:(有谁知道这个问题?
我没有尝试过cx_Oracle,但你可以通过指定各个参数来连接 -
conn = cx_Oracle.connect(user='username', password='p@ssword', dsn='server:port/services')
要么
dsn_tns = cx_Oracle.makedsn('server', 'port', 'services')
conn = cx_Oracle.connect(user='username', password='p@ssword', dsn=dsn_tns)
您可以使用以下任何一种方式基于Service Name
或SID
,无论您拥有什么。
使用SID:
dsn_tns = cx_Oracle.makedsn('server', 'port', 'sid')
conn = cx_Oracle.connect(user='username', password='p@ssword', dsn=dsn_tns)
要么
使用服务名称:
dsn_tns = cx_Oracle.makedsn('server', 'port', service_name='service_name')
conn = cx_Oracle.connect(user='username', password='p@ssword', dsn=dsn_tns)
仅供参考:这是Django中长期存在的bug。包含修复程序的第一个稳定版本是v2.1
这有用吗?
conn = cx_Oracle.connect('username/"p@ssword"@server:port/services')