当前位置: 首页 > news >正文

Python连接Oracle

Python连接Oracle


当前环境:Linux Centos 7

1. 下载安装包cx_Oracle

由于我本地Python版本是2.7,所以选择是2.7版本

wget https://pypi.python.org/packages/e1/18/00987c6a9af9568ee87d1fcba877407684a3f1b87515e5eb82d5d5acb9ff/cx_Oracle-6.0rc1-py27-1.x86_64.rpm#md5=ff8f5cce07bd5ec8ed3ce5c79d451474

参考:

  • python-cx_Oracle
  • 安装包列表

2. 安装cx_Oracle

  • 安装:
rpm -ivh cx_Oracle-6.0rc1-py27-1.x86_64.rpm
  • 查看当前python引入模块库的路径
[root ~]# python
Python 2.7.5 (default, Nov  6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.path
['', '/usr/lib/python2.7/site-packages/AliyunUtil-0.0.1-py2.7.egg', '/usr/lib/python2.7/site-packages/cloud_init-0.7.6-py2.7.egg', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/usr/lib64/python2.7/lib-tk', '/usr/lib64/python2.7/lib-old', '/usr/lib64/python2.7/lib-dynload', '/usr/lib64/python2.7/site-packages', '/usr/lib/python2.7/site-packages']
  • 检查安装路径,如果cx_Oracle.so文件不在以上python引入路径内需要将该文件拷贝到以上python引入路径,所以我这里不需要进行拷贝操作
[root ~]# rpm -qa | grep cx_Oracle | xargs rpm -ql
/usr/lib64/python2.7/site-packages/cx_Oracle-6.0rc1-py2.7.egg-info
/usr/lib64/python2.7/site-packages/cx_Oracle-6.0rc1-py2.7.egg-info/PKG-INFO
/usr/lib64/python2.7/site-packages/cx_Oracle-6.0rc1-py2.7.egg-info/SOURCES.txt
/usr/lib64/python2.7/site-packages/cx_Oracle-6.0rc1-py2.7.egg-info/dependency_links.txt
/usr/lib64/python2.7/site-packages/cx_Oracle-6.0rc1-py2.7.egg-info/top_level.txt
/usr/lib64/python2.7/site-packages/cx_Oracle.so

3. 下载Oracle Library

由于Oracle官网下载东西存在Auth认证,所以简单点就点击选中的rpm包保存在windows上,然后上传到linux上即可
注意:

  • 下载的版本要和连接的Oracle基本一致,我需要连接的Oracle版本是11.2,所以我下载的是oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
  • 操作系统要和之前下载的cx_Oracle要一致,这很重要!!!我在这个上面栽了跟头,花了比较多的时间。。。所以我需要下载64位的
  • Oracle官网下载东西你得先勾选Accept License Agreement,否则你下载不了
  • 其次你得有Oracle的账号

4. 安装Oracle Library

rpm -ivh oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm

5. 配置环境变量

  • 修改Oracle安装路径
    client64改为client,至于为什么要改暂时还不清楚,只知道不改的话会报错Oracle Client library cannot be loaded: libclntsh.so: cannot open shared object file: No such file or directory
cd /usr/lib/oracle/11.2/
mv client64 client
  • 打开~/.bashrc,追加环境变量路径
vim ~/.bashrc
  • 配置环境变量
// 查看Oracle安装路径
[root@iZbp180vortqapb7yf8217Z ~]# rpm -qa | grep oracle | xargs rpm -ql
/usr/lib/oracle/11.2/client64/bin/adrci
/usr/lib/oracle/11.2/client64/bin/genezi
/usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1
/usr/lib/oracle/11.2/client64/lib/libnnz11.so
/usr/lib/oracle/11.2/client64/lib/libocci.so.11.1
/usr/lib/oracle/11.2/client64/lib/libociei.so
/usr/lib/oracle/11.2/client64/lib/libocijdbc11.so
/usr/lib/oracle/11.2/client64/lib/ojdbc5.jar
/usr/lib/oracle/11.2/client64/lib/ojdbc6.jar
/usr/lib/oracle/11.2/client64/lib/xstreams.jar
// 追加ORACLE_HOME环境变量路径
export ORACLE_HOME=/usr/lib/oracle/11.2/client
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
  • 生效配置
source ~/.bashrc

6. 检查是否可以引入cx_Oracle

import没有报错,说明之前的辛苦没有白费

[root client64]# python
Python 2.7.5 (default, Nov  6 2016, 00:28:07) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>>

7. 连接Oracle

一个插入n条数据的Python脚本:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import cx_Oracle
import time

rows = int(sys.argv[1])
con = cx_Oracle.connect('test/test@sampledb')
cur = con.cursor()
cur.execute("SELECT MAX(ID) FROM PTTEST")
max_id = cur.fetchone()[0] or 0

start_id = max_id + 1
for i in xrange(rows):
    cur.execute("INSERT INTO PTTEST (ID, NAME, AGE, GENDER, SALARY)VALUES(%d, 'pt', 15, 'male', 50000)" % int(i + start_id))
    if i % 100 == 0:
        time.sleep(3)
        print 'Insert rows [%d]:%d' % (int(time.time()), i)
        con.commit()
cur.close()
con.close()

相关文章:

  • php新手入门必读!
  • 如何查看配置文件.mobileprovision的UUID
  • MySQL中一个文档疏漏的分析测试(r13笔记第3天)
  • 使用swoole websocket 实现执行console php文件 把输出返回给浏览器
  • 复习
  • 初识activiti
  • canves 画视频
  • CentOS6.8安装mongodb3.0与备份脚本
  • C++传递不定参函数
  • Android笔记之网络状态推断
  • mysql 5.6.25编译安装详细步骤
  • 手写 jQuery 框架
  • P1120 小木棍 [数据加强版]
  • Oracle 11gR2 List-Range分区实验
  • python操作excel
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • C语言笔记(第一章:C语言编程)
  • ES10 特性的完整指南
  • ES6 学习笔记(一)let,const和解构赋值
  • github指令
  • JS+CSS实现数字滚动
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • python学习笔记 - ThreadLocal
  • Terraform入门 - 1. 安装Terraform
  • vagrant 添加本地 box 安装 laravel homestead
  • 关于Java中分层中遇到的一些问题
  • 离散点最小(凸)包围边界查找
  • 聊聊flink的TableFactory
  • 前端学习笔记之观察者模式
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 网页视频流m3u8/ts视频下载
  • 学习ES6 变量的解构赋值
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #、%和$符号在OGNL表达式中经常出现
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (zt)最盛行的警世狂言(爆笑)
  • (已解决)什么是vue导航守卫
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)关于多人操作数据的处理策略
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .Net中wcf服务生成及调用
  • .sys文件乱码_python vscode输出乱码
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @test注解_Spring 自定义注解你了解过吗?
  • [51nod1610]路径计数
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项