美文网首页
使用Python开发客户端,支持SQLServer和Oracle

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

作者: loveinthesweet | 来源:发表于2019-12-25 11:59 被阅读0次

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

    代码测试可以连通。

    相关文章

      网友评论

          本文标题:使用Python开发客户端,支持SQLServer和Oracle

          本文链接:https://www.haomeiwen.com/subject/hqslfqtx.html