Python开发客户端支持在windows和Linux下,并支持数据库SQLServer和Oracle
1. windows下开发和环境配置
1. SQLServer驱动连接
1. 下载支持SQLServer连接驱动的包:pymssql,在windows下能很好的支持SQLServer,所以直接下载完此包就可以使用,下载命令可以使用pip install
pymssql 或者 pip3 install pymssql。
2.
连接代码: conn = pymssql.connect(host,username, pwd, dbName)
2.Oracle驱动
1. 注意:系统版本、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. 我们在开发连接Oracle数据库时,必须在本机有Oracle安装包和客户端或者要连接的Oracle数据库所在的服务器上有Oracle安装和客户端,将客户端路径放在安装Oracle 目录下。
如果没有将Oracle客户端放在Oracle安装目录下,运行程序报:Error: DPI-1047: Cannot
locate a 64-bit Oracle Client library 的错误。(这个问题排查和调试用了将近一天的时间)。
解决方法:1. 将客户端的目录,比如 D:\oracle\instantclient_11_2 添加到path
2. 配置环境变量ORACL_HOME:将客户端的上一级目录,比如 D:\oracle 设置为ORACLE_HOME的值
3. 如果配置了ORACLE_HOME,执行报错:```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下,并且在系统变量path:加上此路径:C:\app\shizhenqiang\product\11.2.0\instancelient_11_2。
3. 上面问题解决完之后,又遇到错误:cx_Oracle.DatabaseError:ORA-12541: TNS:no listener
以上问题解决之后,windows Oracle就可以连接成功了。
2. Linux下开发和配置环境
将防火墙关闭,如果不关闭,外网是无法请求插件执行数据库连接和查询数据的。
查看防火墙的状态的命令为:sudo systemctl status
firewalld。
打开防火墙的方式有两种,一种是打开后重启会恢复回原来的状态,命令为:sudo
systemctl start firewalld;另一种是打开后重启不会恢复到原来的状态,命令为:sudo
systemctl enable firewalld,这种方式输入命令后要重启系统才会生效。
关闭防火墙的方式也有两种,和打开相对应,命令分别为
sudo systemctl stop firewalld
sudo systemctl disable firewalld。
1.SQLServer驱动连接
在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下进行配置环境和开发的,因为deepin有友好的图形化界面,
利于工具开发。
2. 安装Python,配置路径:
1> sudo./configure --prefix=/usr/local/python-3.7.3
配置完之后,执行如下命令
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. 解压 并进入文件夹内
3. ./configure--prefix=/etc/freetds --with-tdsver=7.0 --enable-msdblib --with-gnu-ld --enable-shared --enable-static
4. 执行make 再执行make install
5. 查看FreeTds状态执行命令:tsql -C
4. 驱动连接
安装完FreeTds 之后,就可以通过pymssql连接SQLServer数据库了,代码编写与在windows下连接SQLServer的代码一样。
5. 打包Linux下可执行客户端
打包命令:pyinstaller –clean -F -cyunzhangfang.py
打包之后, 运行程序:./yunzhangfang
通过postman是可以调用接口并能数据库连接成功和查询数据,
外网也可以调用。
6. 将打包的客户端放到centos7系统上
只把打包的客户端放到centos7上,不配置相关环境。
在centos7下, 也是和在deepin系统上一样可以运行和查询数据。外网也可以访问。
2.Oracle驱动连接
环境是在centos7系统上,首先是安装docker,在docker上安装Oracle。
1. 拉取Oracle镜像
docker pull
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g。
拉取的是阿里云的。外网的太慢,容易断开。
2. 下载完之后查看镜像
执行命令:docker images
3. 创建容器
root下命令:dockerrun -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
这里说一下,命令后面的地址一定要是你下载的镜像地址也就是你拉取镜像名字,否则会出现名字已存在等问题!
如果创建成功能会返回容器id
4. 启动容器
root下命令:dockerstart oracle11g
5. 进入镜像
1. root下命令:dockerexec -it oracle11g bash
执行完此命令会自动切换成oracle 用户
2. oracle下命令:进行软连接:sqlplus /nolog
执行完之后发现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. 创建软连接
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
5. 切换至oracle
执行sqlplus /nolog
可以执行成功。
再执行conn /as sysdba
显示Connected
6. 修改Oracle下的用户名密码:
alter user system identified by system;
alter user sys identified by sys;
这个时候通过Navicat连接Oracle数据库,发现联不通。
报错:
7. 在Oracle用户下执行命令: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. 现在编写代码
代码测试可以连通。