使用Python開發(fā)客戶端,支持SQLServer和Oracle

Python開發(fā)客戶端支持在windows和Linux下,并支持數(shù)據(jù)庫SQLServer和Oracle


1.?windows下開發(fā)和環(huán)境配置

1. SQLServer驅(qū)動連接

1. 下載支持SQLServer連接驅(qū)動的包:pymssql,在windows下能很好的支持SQLServer,所以直接下載完此包就可以使用,下載命令可以使用pip install

pymssql 或者 pip3 install pymssql。

2.

連接代碼: conn = pymssql.connect(host,username, pwd, dbName)

2.Oracle驅(qū)動

1.? 注意:系統(tǒng)版本、Python版本、Oracle客戶端版本、cx_Oracle版本必須保持一致。

比如我的windows電腦是64位的,Python是3.7 (64位), cx_Oracle是與Python對應的7.0(64位),Oracle客戶端:oracle_instantclient-basic-windows.64X-11.20.g

不建議在cmd中直接使用命令:pip

install cx_Oracle 下載cx_Oracle, 因為下載的版本是最高版本,導致不兼容。

我是在idea中如下操作:

然后再點擊+號,輸入cx-Oracle:


2. 我們在開發(fā)連接Oracle數(shù)據(jù)庫時,必須在本機有Oracle安裝包和客戶端或者要連接的Oracle數(shù)據(jù)庫所在的服務器上有Oracle安裝和客戶端,將客戶端路徑放在安裝Oracle 目錄下。

? ? 如果沒有將Oracle客戶端放在Oracle安裝目錄下,運行程序報:Error: DPI-1047: Cannot

locate a 64-bit Oracle Client library 的錯誤。(這個問題排查和調(diào)試用了將近一天的時間)。

? ??解決方法:1.?將客戶端的目錄,比如 D:\oracle\instantclient_11_2 添加到path


? ? ? ? ?2. 配置環(huán)境變量ORACL_HOME:將客戶端的上一級目錄,比如 D:\oracle 設置為ORACLE_HOME的值


? ? ? ? ?3. 如果配置了ORACLE_HOME,執(zhí)行報錯:```nls_lan python Error: 'ascii' codec can't encode characters in

position 28-31: ordinal not in range(128), 然后將下載的客戶端目錄放在


? ? ? ? ? ? ?Oracle安裝包下,如C:\app\shizhenqiang\product\11.2.0\instancelient_11_2下,并且在系統(tǒng)變量path:加上此路徑:C:\app\shizhenqiang\product\11.2.0\instancelient_11_2。

3. 上面問題解決完之后,又遇到錯誤:cx_Oracle.DatabaseError:ORA-12541: TNS:no listener


以上問題解決之后,windows Oracle就可以連接成功了。

2. Linux下開發(fā)和配置環(huán)境

將防火墻關閉,如果不關閉,外網(wǎng)是無法請求插件執(zhí)行數(shù)據(jù)庫連接和查詢數(shù)據(jù)的。

查看防火墻的狀態(tài)的命令為:sudo systemctl status

firewalld。

打開防火墻的方式有兩種,一種是打開后重啟會恢復回原來的狀態(tài),命令為:sudo

systemctl start firewalld;另一種是打開后重啟不會恢復到原來的狀態(tài),命令為:sudo

systemctl enable firewalld,這種方式輸入命令后要重啟系統(tǒng)才會生效。

關閉防火墻的方式也有兩種,和打開相對應,命令分別為

sudo systemctl stop firewalld

sudo systemctl disable firewalld。

1.SQLServer驅(qū)動連接

在Linux下使用SQLServer,必須要安裝FreeTDS, 否則你在pip install pymssql 后,運行程序報:File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/pymssql

", line 3, in <module>。

1. 我首先是在deepin Linux下進行配置環(huán)境和開發(fā)的,因為deepin有友好的圖形化界面,

利于工具開發(fā)。

2. 安裝Python,配置路徑:

1> sudo./configure --prefix=/usr/local/python-3.7.3

配置完之后,執(zhí)行如下命令

????2>sudo make && sudo make install

???驗證是否安裝成功:python3


證明已安裝成功

3 > 建立軟連接

ln -s/usr/local/python3.7.3/bin/python3.7 /usr/bin/python3.7.3??



3. 安裝FreeTds

?????? 1.下載安裝包:http://www.freetds.org/

2. 解壓 并進入文件夾內(nèi)

3. ./configure--prefix=/etc/freetds --with-tdsver=7.0 --enable-msdblib --with-gnu-ld? --enable-shared --enable-static

4. 執(zhí)行make 再執(zhí)行make install

5. 查看FreeTds狀態(tài)執(zhí)行命令:tsql -C

4. 驅(qū)動連接

?????? 安裝完FreeTds 之后,就可以通過pymssql連接SQLServer數(shù)據(jù)庫了,代碼編寫與在windows下連接SQLServer的代碼一樣。

5. 打包Linux下可執(zhí)行客戶端

打包命令:pyinstaller –clean -F -cyunzhangfang.py


打包之后,?運行程序:./yunzhangfang

通過postman是可以調(diào)用接口并能數(shù)據(jù)庫連接成功和查詢數(shù)據(jù),

外網(wǎng)也可以調(diào)用。


6. 將打包的客戶端放到centos7系統(tǒng)上

只把打包的客戶端放到centos7上,不配置相關環(huán)境。

在centos7下, 也是和在deepin系統(tǒng)上一樣可以運行和查詢數(shù)據(jù)。外網(wǎng)也可以訪問。


2.Oracle驅(qū)動連接

環(huán)境是在centos7系統(tǒng)上,首先是安裝docker,在docker上安裝Oracle。

1. 拉取Oracle鏡像

docker pull

registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g。

拉取的是阿里云的。外網(wǎng)的太慢,容易斷開。

2. 下載完之后查看鏡像

執(zhí)行命令:docker images


3. 創(chuàng)建容器

root下命令:dockerrun -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

????????這里說一下,命令后面的地址一定要是你下載的鏡像地址也就是你拉取鏡像名字,否則會出現(xiàn)名字已存在等問題!

如果創(chuàng)建成功能會返回容器id


4. 啟動容器

root下命令:dockerstart oracle11g


5. 進入鏡像

1. root下命令:dockerexec -it oracle11g bash

??執(zhí)行完此命令會自動切換成oracle 用戶

2. oracle下命令:進行軟連接:sqlplus /nolog

??執(zhí)行完之后發(fā)現(xiàn)not foundcommand

3. 切換至root?編輯vi /etc/profile

?? exportORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2

???exportORACLE_SID=helowin

export PATH=$ORACLE_HOME/bin:$PATH

4. 創(chuàng)建軟連接

?? ln -s $ORACLE_HOME/bin/sqlplus? /usr/bin

5. 切換至oracle


執(zhí)行sqlplus /nolog

可以執(zhí)行成功。

再執(zhí)行conn /as sysdba

顯示Connected


6. 修改Oracle下的用戶名密碼:

??alter user system identified by system;

alter user sys identified by sys;


這個時候通過Navicat連接Oracle數(shù)據(jù)庫,發(fā)現(xiàn)聯(lián)不通。

報錯:


7. 在Oracle用戶下執(zhí)行命令:lsnrctl status


修改/home/oracle/app/oracle/product/11.2.0/dbname_2/network/admin/tndnames.org


將host改為虛擬機的地址,service_name改為helowinXDB。


這個時候通過Navicat去連接,連接的時候一定要將service Name填寫為:helowinXDB


8. 現(xiàn)在編寫代碼


代碼測試可以連通。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容