Python開發(fā)客戶端支持在windows和Linux下兴溜,并支持?jǐn)?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對應(yīng)的7.0(64位),Oracle客戶端:oracle_instantclient-basic-windows.64X-11.20.g
不建議在cmd中直接使用命令:pip
install cx_Oracle 下載cx_Oracle, 因為下載的版本是最高版本讳癌,導(dǎo)致不兼容穿稳。
我是在idea中如下操作:
然后再點擊+號,輸入cx-Oracle:
2. 我們在開發(fā)連接Oracle數(shù)據(jù)庫時晌坤,必須在本機有Oracle安裝包和客戶端或者要連接的Oracle數(shù)據(jù)庫所在的服務(wù)器上有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 設(shè)置為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)境
將防火墻關(guān)閉赢底,如果不關(guān)閉失都,外網(wǎng)是無法請求插件執(zhí)行數(shù)據(jù)庫連接和查詢數(shù)據(jù)的。
查看防火墻的狀態(tài)的命令為:sudo systemctl status
firewalld幸冻。
打開防火墻的方式有兩種粹庞,一種是打開后重啟會恢復(fù)回原來的狀態(tài),命令為:sudo
systemctl start firewalld洽损;另一種是打開后重啟不會恢復(fù)到原來的狀態(tài)庞溜,命令為:sudo
systemctl enable firewalld,這種方式輸入命令后要重啟系統(tǒng)才會生效趁啸。
關(guān)閉防火墻的方式也有兩種强缘,和打開相對應(yī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下進(jìn)行配置環(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. 解壓 并進(jìn)入文件夾內(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上,不配置相關(guān)環(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. 進(jìn)入鏡像
1. root下命令:dockerexec -it oracle11g bash
??執(zhí)行完此命令會自動切換成oracle 用戶
2. oracle下命令:進(jìn)行軟連接: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)在編寫代碼
代碼測試可以連通慕淡。