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的装饰器的运用
May 05 Python
python中使用序列的方法
Aug 03 Python
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
Python3.5文件修改操作实例分析
May 01 Python
利用python如何在前程无忧高效投递简历
May 07 Python
ipad上运行python的方法步骤
Oct 12 Python
tf.concat中axis的含义与使用详解
Feb 07 Python
Python IDLE或shell中切换路径的操作
Mar 09 Python
通过python调用adb命令对App进行性能测试方式
Apr 23 Python
python 实时调取摄像头的示例代码
Nov 25 Python
Python 的 sum() Pythonic 的求和方法详细
Oct 16 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
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
php UTF-8、Unicode和BOM问题
2010/05/18 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
php接口技术实例详解
2016/12/07 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
jquery 分页控件实现代码
2009/11/30 Javascript
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
vue ssr 指南详读
2018/06/29 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
Python入门教程之if语句的用法
2015/05/14 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
学习python的前途 python挣钱
2019/02/27 Python
python实现AES和RSA加解密的方法
2019/03/28 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
播音主持女孩的自我评价分享
2013/11/20 职场文书
办公室综合文员岗位职责范本
2014/02/13 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
党员干部公开承诺书
2014/03/26 职场文书
医疗纠纷协议书
2014/04/16 职场文书
给领导的感谢信范文
2015/01/23 职场文书
2015年医院药剂科工作总结
2015/05/04 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
解析python中的jsonpath 提取器
2022/01/18 Python
muduo TcpServer模块源码分析
2022/04/26 Redis