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字符串加密解密的三种方法分享(base64 win32com)
Jan 19 Python
python进阶教程之文本文件的读取和写入
Aug 29 Python
详解Python中的文件操作
Aug 28 Python
获取Django项目的全部url方法详解
Oct 26 Python
python分析作业提交情况
Nov 22 Python
Python生成任意范围任意精度的随机数方法
Apr 09 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
Feb 22 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
通过python 执行 nohup 不生效的解决
Apr 16 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
Python实现单例模式的5种方法
Jun 15 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伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
2015/11/26 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
2016/03/31 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
js实现截图保存图片功能的代码示例
2017/02/16 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
理解Python中函数的参数
2015/04/27 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
Django REST framework 分页的实现代码
2019/06/19 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
体育教育个人自荐信范文
2013/12/01 职场文书
财务会计专业求职信范文
2013/12/31 职场文书
大学生就业策划书范文
2014/04/04 职场文书
中秋晚会活动方案
2014/08/31 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
宿舍卫生管理制度
2015/08/05 职场文书
党员干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers