oracle環境:html
服務器:docker中的oracle服務器,服務名爲xe,參考unbuntu下Docker安裝oracle和mysqlpython
客戶端:instantclient客戶端,參考打造ubuntu下精簡版的oracle客戶端及pro*c編譯環境mysql
因爲oracle環境變量:sql
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服務名:docker
解決方案:ubuntu
一、在bash中啓動pycharmbash
$/usr/local/bin/charm服務器
二、修改python代碼加上主機地址oracle
如:.net
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'
就可解決。
三、經過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
見下圖