oracle环境:
服务器:docker中的oracle服务器,服务名为xe,参考unbuntu下Docker安装oracle和mysql
客户端:instantclient客户端,参考打造ubuntu下精简版的oracle客户端及pro*c编译环境
由于oracle环境变量:
export ORACLE_HOME=/opt/ora11g/instantclient_11_2
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG='simplified chinese_china'.UTF8
export PATH=$ORACLE_HOME/bin:$PATH
alias sqlplus='/usr/bin/rlwrap sqlplus'
在.bashrc中设置,而pycharm是通过桌面快捷方式来启动的,导致pycharm没有继承oracle相关的环境变量,从而python无法识别oracle服务名:
解决方案:
1、在bash中启动pycharm
$/usr/local/bin/charm
2、修改python代码加上主机地址
如:
conn= cx_Oracle.connect('scott/tiger@XE')
改为:
conn= cx_Oracle.connect('scott/tiger@127.0.0.1/XE')
这样连接成功,但中文会乱码:因为没有继承
export NLS_LANG='simplified chinese_china'.UTF8
python代码中加上:
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
就可解决。
3、通过pyodbc也会有同样的问题:
/etc/odbcinst.ini配置不变:
[oracle]
Description=Oracle ODBC driver for Oracle 11g
Driver=/opt/ora11g/instantclient_11_2/lib/libsqora.so.11.1
Setup=
FileUsage=
CPTimeout=
CPReuse=
修改/etc/odbc.ini中的ServerName加上主机地址:
即把
[ORCLORA1]
Description = ODBC for Oracle
Driver = oracle
ServerName = XE
UserID = scott
Password = tiger
改成:
[ORCLORA1]
Description = ODBC for Oracle
Driver = oracle
ServerName = 127.0.0.1/XE
UserID = scott
Password = tiger
4.sybase也会有同样的问题
可以通过在bash中启动pycharm也可以在运行配置窗口设置environment variable如下:
PYTHONUNBUFFERED=1;LD_LIBRARY_PATH=/opt/sybase/ASE-16_0/lib:/opt/sybase/OCS-16_0/lib:$LD_LIBRARY_PATH
见下图