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基础教程之类class定义使用方法
Feb 20 Python
python求crc32值的方法
Oct 05 Python
使用python实现生成用户信息
Mar 20 Python
详解python中的Turtle函数库
Nov 19 Python
python制作填词游戏步骤详解
May 05 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
Jun 21 Python
python双向链表原理与实现方法详解
Dec 03 Python
python实现在一个画布上画多个子图
Jan 19 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
Python3打包exe代码2种方法实例解析
Feb 17 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
Nov 01 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来检测proxy
2006/10/09 PHP
服务器端解压缩zip的脚本
2006/12/22 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
PHP队列用法实例
2014/11/05 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
移动端图片上传旋转、压缩问题的方法
2018/10/16 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
利用python画出折线图
2018/07/26 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
请说出几个常用的异常类
2013/01/08 面试题
后勤部长岗位职责
2013/12/14 职场文书
教育科研先进个人材料
2014/01/26 职场文书
高中军训感言500字
2014/02/24 职场文书
财产公证书样本
2014/04/04 职场文书
村抢险救灾方案
2014/05/09 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
《扇形统计图》教学反思
2016/02/17 职场文书
如何写好开幕词?
2019/06/24 职场文书
Redis性能监控的实现
2021/07/09 Redis
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL