使用Python开发客户端,支持SQLServer和Oracle

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

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. 现在编写代码


代码测试可以连通。

你可能感兴趣的:(使用Python开发客户端,支持SQLServer和Oracle)