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


代码测试可以连通。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容