Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法


Posted in Python onApril 23, 2016

本文档主要描述了Linux下python数据库驱动的安装和配置,用来实现在Linux平台下通过python访问MySQL、Oracle、SQL Server数据库。
其中包括以下几个软件的安装及配置:
unixODBC
FreeTDS
pyodbc
cx_Oracle

欢迎转载,请注明作者、出处。
作者:张正
QQ:176036317
如有疑问,欢迎联系。       

本文档主要描述了Linux下python数据库驱动的安装和配置,用来实现在Linux平台下通过python访问MySQL、Oracle、SQL Server数据库。

一、前提概述...
二、驱动安装...
1. unixODBC安装...
2. FreeTds安装...
3. pyodbc安装...
4. cx_Oracle安装...
三、驱动配置...
四、连接测试...

一、前提概述

pyodbc是一个Python模块,能够让python使用 ODBC 连接来自Windows, Linux, OS/X等系统中的大部分数据库。pyodbc依赖于unixODBC和FreeTDS,因此需要先安装unixODBC和FreeTDS。(FreeTDS是一个开源的C程序库,它可以实现在Linux系统下访问操作SQL Server数据库)
cx_Oracle 是一个用来连接并操作 Oracle 数据库的 Python 扩展模块, 支持包括 Oracle 9.2 10.2 以及 11.1 等版本。

二、驱动安装

1. unixODBC安装
         a.下载unixODBC安装包:unixODBC-2.3.2.tar.gz
         下载地址:http://www.linuxfromscratch.org/blfs/view/cvs/general/unixodbc.html
         b.解压:tar -zxf unixODBC-2.3.2.tar.gz
         c.安装:cd unixODBC-2.3.2
         ./configure --enable-gui=no
         make
         make install
         NOTES:
         编译安装三个步骤之间,可通过echo $?查看退出状态,为0则正常,可进行下一步操作。(MYSQL驱动可安装MySQL-python.x86_64)
 
2. FreeTds安装
         下载FreeTds安装包:freetds-stable.tgz
         下载地址:http://www.freetds.org/
         tar -zxvf freetds-stable.tgz
         cd freetds-0.91
./configure --prefix=/etc/freetds --with-tdsver=7.0 --enable-msdblib --with-gnu-ld  --enable-shared --enable-static
         make
         make install
         同样可通过echo $?查看退出状态,安装完后可查看freeTds相关版本及安装信息:
         cd src/apps/
         ./tsql -C

[root@localhost apps]# ./tsql -C 
Compile-time settings (established with the "configure" script)
              Version: freetds v0.91
       freetds.conf directory: /usr/local/etc
   MS db-lib source compatibility: no
    Sybase binary compatibility: no
           Thread safety: yes
           iconv library: yes
            TDS version: 7.1
               iODBC: no
              unixodbc: yes
       SSPI "trusted" logins: no
              Kerberos: no

3. pyodbc安装
下载pyodbc-3.0.6.zip
下载地址:https://3water.com/softs/453989.html
unzip pyodbc-3.0.6.zip
cd pyodbc-3.0.6
python setup.py build
python setup.py install
NOTES:安装时build 遇到以下错误,而且gcc相关包已经安装完全

/root/software/pyodbc-3.0.6/src/connection.h:27: error: ‘uintptr_t' does not name a type

error: command 'gcc' failed with exit status 1

 查看python版本,发现其为python 2.4,通过官网下载页面信息对比,可知pyodbc-3.0.6不支持python 2.4,重新下载pyodbc-2.1.7安装即可。
 
4. cx_Oracle安装

4.1. 下载:cx_oracle:cx_Oracle-5.1.2-10g-py27-1.x86_64.rpm
http://sourceforge.net/projects/cx-oracle/files/
NOTES:
需要下载对应版本的驱动
 
4.2  oracle instant client 安装:
gunzip 10201_client_linux_x86_64.cpio.gz
cpio -idmv < 10201_client_linux_x86_64.cpio
在~/.bash_profile中添加oracle相关配置:

export ORACLE_BASE=/opt/oracle

export ORACLE_HOME=$ORACLE_BASE/client_10g

export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH

建立oracle用户和文件目录

groupadd dba

useradd -g dba oracle

su - oracle

mkdir -p /opt/oracle/client_10g

配置.bash_profile
回到root用户:

mv client /home/oracle/
[root@localhost software]# chown -R oracle:dba /home/oracle/client
 
su - oracle 进行安装:

cd /home/oracle/client/response

vi instantClient.rsp

修改以下参数:
UNIX_GROUP_NAME=dba

ORACLE_HOME=/opt/oracle/client_10g

ORACLE_HOME_NAME=OraClient10ghome1

cd ../

./runInstaller -silent -noconfig -responseFile /home/oracle/client/response/instantClient.rsp

python setup.py build

python setup.py install

4.3 安装cx_Oracle:

rpm -ivh cx_oracle:cx_Oracle-5.1.2-10g-py27-1.x86_64.rpm

三、驱动配置

 1. 配置freetds:
vi /etc/freetds/etc/freetds.conf
text size = 10240000
client charset = UTF-8
 
2. 配置freetds驱动:
vi freetds.ini
[FreeTDS]
Description     = 0.91 with protocol v7.0
Driver          = /etc/freetds/lib/libtdsodbc.so
 
odbcinst -i -d -f freetds.ini
 
3. 配置数据源:
vi db.ini
[SQLSERVER]
Driver = FreeTDS
Description = SQLSERVER
Trace   =No
Server  =192.168.16.13
Port    =1433
Database=master
#此处需要配置SQL Server数据的连接信息
 
odbcinst -i -s -f db.ini
 
cat /root/.odbc.ini
[SQLSERVER]
Driver=FreeTDS
Description=SQLSERVER
Trace=No
Server=192.168.16.13
Port=1433
Database=master
 
NOTES:
若见到以下错误:

import cx_Oracle

Traceback (most recent call last):

  File "", line 1, in ?

ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directory

则需要找到对应的文件建立软链接,如:
ln -s /opt/oracle/db_10g/lib/libclntsh.so.10.1 /usr/lib64/libclntsh.so.10.1
 
四、连接测试
1. 前提说明:
         本处提供的连接测试,仅仅是一个简单的连通并发起查询,以证明驱动的正确安装和配置。
         可先进行import 查看驱动安装是否有误:

[root@localhost etc]# python

Python 2.4.3 (#1, Apr 14 2011, 20:41:59)

[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import MySQLdb #测试MySQL

>>> import cx_Oracle #测试Oracle

>>> import pyodbc   #测试pyodbc,可访问SQL Server

>>>

若驱动正确安装,执行import操作就不会报错。

2. MySQL连接测试:

[root@localhost software]# cat mysql_test.py
import MySQLdb
sql='show databases';
conn=MySQLdb.connect(host='localhost',user='test',passwd='test',db='test',port=3306)
cur=conn.cursor()
cur.execute(sql)
print cur.fetchone()
 
[root@localhost software]# python mysql_test.py
('information_schema',)

3.Oracle连接测试:

[root@localhost software]# cat test.py
import time
import cx_Oracle
sql2="select * from tab";
connstr="system/oracle@192.168.43.130:1521/orcl"
conn=cx_Oracle.connect(connstr)
cur=conn.cursor()
aa=cur.execute(sql2)
print cur.fetchone()
print cur.rowcount
print "connection string is  : ",conn.dsn
print "the database version is: ",conn.version
 
[root@localhost software]# python test.py
('SYSCATALOG', 'SYNONYM', None)
1
connection string is  : 192.168.43.130:1521/orcl
the database version is: 10.2.0.1.0

4.SQL Server连接测试

[root@localhost software]# cat test_sqlserver.py

import pyodbc

dd=sqlserver('DRIVER=FreeTDS;SERVER=192.168.16.13;PORT=1433;DATABASE=master;UID=dba_test_tmp;PWD=nimeia;TDS_Version=8.0;',"select getdate() as '时间'")

最后附上完整的word版:pythonsjkqdaz(3water.com)

Python 相关文章推荐
详解Python中break语句的用法
May 14 Python
在Django的通用视图中处理Context的方法
Jul 21 Python
利用Python爬虫给孩子起个好名字
Feb 14 Python
python模仿网页版微信发送消息功能
Feb 24 Python
详解python多线程、锁、event事件机制的简单使用
Apr 27 Python
浅谈python3发送post请求参数为空的情况
Dec 28 Python
Python3最长回文子串算法示例
Mar 04 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
May 31 Python
pandas的qcut()方法详解
Jul 06 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
Django视图扩展类知识点详解
Oct 25 Python
python实现图像拼接
Mar 05 Python
Python 中的 else详解
Apr 23 #Python
Python 探针的实现原理
Apr 23 #Python
一键搞定python连接mysql驱动有关问题(windows版本)
Apr 23 #Python
Linux 发邮件磁盘空间监控(python)
Apr 23 #Python
web.py 十分钟创建简易博客实现代码
Apr 22 #Python
在windows下快速搭建web.py开发框架方法
Apr 22 #Python
基于python实现的抓取腾讯视频所有电影的爬虫
Apr 22 #Python
You might like
php下清空字符串中的HTML标签的代码
2010/09/06 PHP
PHP 反射(Reflection)使用实例
2015/05/12 PHP
yii框架无限极分类的实现方法
2017/04/08 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
2016/10/28 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
python实现n个数中选出m个数的方法
2018/11/13 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
pygame实现非图片按钮效果
2019/10/29 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
伦敦剧院门票:From The Box Office
2018/06/30 全球购物
银行门卫岗位职责
2013/12/29 职场文书
酒店前厅员工辞职信
2014/01/08 职场文书
软件部经理岗位职责范本
2014/02/25 职场文书
协议书格式
2014/04/23 职场文书
2015年企业新年寄语
2014/12/08 职场文书
学生会生活部工作总结2015
2015/03/31 职场文书
校园广播站开场白
2015/06/01 职场文书
关于使用Redisson订阅数问题
2022/01/18 Redis