記錄一下麒麟3.0內網安裝python透過jdbc連線達夢6資料庫

旅于沟壑,行于天地發表於2024-06-20

麒麟3.0基於Red Hat 4.1.2-42,此版本可以編譯python3.8.3,但是內網無法安裝libffi-dev,導致無法安裝JPype1和JayDeBeApi,所以改用python2.7.18

1、安裝python2.7.18

https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz

# 解壓
tar -zxvf Python-2.7.18.tgz
# 切換到新的目錄下
cd 2.7.18/
# 執行configure並且設定新python要裝在的位置
./configure --prefix=/usr/local/python2
# 清除上次的make命令所產生的object檔案(字尾為".o"的檔案)及可執行檔案
make clean
# 根據Makefile檔案編譯原始碼、連線、生成目標檔案、可執行檔案
make
# 將編譯成功的可執行檔案安裝到系統目錄中,一般為/usr/local/bin目錄
make install

2、 安裝setuptools-42,JPype1和JayDeBeApi基於該依賴

https://files.pythonhosted.org/packages/ab/41/ab6ae1937191de0c9cbc115d0e91e335f268aa1cd85524c86e5970fdb68a/setuptools-42.0.0.zip

# 解壓,也可以在windows下解壓
uzip setuptools-42.0.0.zip
# 切換到新的目錄下
cd setuptools-42.0.0
# 安裝
python setup.py install

3、安裝JPype1-0.6.3,高版本的JPype1麒麟環境無法編譯透過,JayDeBeApi基於JPype1

https://files.pythonhosted.org/packages/c4/4b/60a3e63d51714d4d7ef1b1efdf84315d118a0a80a5b085bb52a7e2428cdc/JPype1-0.6.3.tar.gz

# 解壓
tar -zxvf JPype1-0.6.3.tar.gz
# 切換到新的目錄下
cd JPype1-0.6.3
# 安裝
python setup.py install

4、安裝JayDeBeApi-1.2.3

https://files.pythonhosted.org/packages/5c/8c/f27750106bf1fba33f92d83fb866af164179f7046495bc5a61fae26d9475/JayDeBeApi-1.2.3.tar.gz

# 解壓
tar -zxvf JayDeBeApi-1.2.3.tar.gz
# 切換到新的目錄下
cd JayDeBeApi-1.2.3
# 安裝
python setup.py install

5、配置java環境變數,下載JDK,解壓匯入如下環境變數,JayDeBeApi基於java執行環境

export JAVA_HOME=/usr/local/jdk1.8.0_271 
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH

6、測試連線

#匯入jaydebeapi
import jaydebeapi
#配置dm資料庫連結127.0.0.1是資料庫IP,4631是資料庫埠,test是資料庫名
url = 'jdbc:dm://127.0.0.1:4631/test'
#使用者名稱
user = 'DBA'
#密碼
password = 'DBA'
#驅動名,預設
dirver = 'dm.jdbc.driver.DmDriver'
#達夢jdbc驅動,你伺服器jar位置
jarFile = '/opt/dmdbms/jar/DmJdbcDriver.jar'
#查詢sql語句,tes.test.sys_user是資料庫名.模式名.表名
sqlStr = 'select count(1) from test.test.sys_user'
#建立資料庫連線,傳入引數
conn = jaydebeapi.connect(dirver, url, [user, password], jarFile)
#建立遊標
curs=conn.cursor()
#執行sql語句
curs.execute(sqlStr)
#接收執行結果
result=curs.fetchall()
#輸出執行結果
print(result)
#關閉遊標
curs.close()
#關閉資料庫連線
conn.close()

7、遇到的問題

普通使用者匯入jaydebeapi無此模組,在root使用者下可以import,jaydebeapi、JPype1、setuptools安裝在/usr/local/python2.7/lib/python2.7/site-packages下,正常許可權如下圖,本人在另外一臺服務安裝許可權卻只有700,導致普通使用者下無法匯入模組,請檢查模組是有訪問許可權,包括JPype1子目錄許可權

或者在python程式碼中匯入import,jaydebeapi、JPype1、setuptools的path,這種方法比較麻煩

import sys

sys.path.append('/usr/local/python2.7/lib/python2.7/site-packages/JPype1-0.6.3-py2.7-linux-x86_64.egg')

sys.path.append('/usr/local/python2.7/lib/python2.7/site-packages/JayDeBeApi-1.2.3-py2.7.egg')

sys.path.append('/usr/local/python2.7/lib/python2.7/site-packages/setuptools-42.0.0-py2.7.egg')

最後希望我的文章能給予你思路。

相關文章