环境:

Python版本:3.6.6

win系统:64位

Linux系统:64位

首先安装配置时,版本必须一致!包括:系统版本,python版本,oracle客户端的版本,cx_Oracle的版本!

需要的安装包:

Oracle Instant Client 客户端下载

https://www.oracle.com/cn/database/technologies/instant-client/downloads.html

instantclient-basic-windows.x64-11.2.0.4.0.zip

cx_Oracle 下载

https://pypi.python.org/pypi/cx_Oracle/6.0rc1

https://sourceforge.net/projects/cx-oracle/files/

cx_Oracle-6.0rc1-cp36-cp36m-manylinux1_x86_64.whl # linux

cx_Oracle-6.0rc1-cp36-cp36m-win_amd64.whl # PIP 安装

Windows 安装步骤:

  1. 解压 [instantclient ]客户端到指定目录,并新建环境变量:例如: ORACLE_HOME == D:\app\oracle\product\instantclient_11_2

    (设置好后cx_oracle会通过此路径找到它要的oci.dll等动态链接库)

或者手动将文件复制过去:

将解压文件夹下的oci.dll, oraocci12.dll,oraociei12.dll 拷贝到python安装目录下的lib/site-packages中

  1. 安装 cx_Oracle ;
  2. 验证安装是否成功: import cx_Oracle 或 python -c "import cx_Oracle"

Linux 安装步骤:

  1. 解压 [instantclient-basic-windows.x64-11.2.0.4.0.zip] 到指定目录;
  2. 解压后的 [instantclient_11_2]目录。添加到 PATH环境变量中(如下);
$ vim /etc/profile #文件尾部添加
export ORACLE_HOME=/opt/instantclient_11_2/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
$ source /etc/profile 使文件修改生效

$ vim ~/.bash_profile
export ORACLE_HOME=/usr/lib/oracle/12.2/client64
export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib
$ source .bash_profile 使文件修改生效
  1. 创建软连接

    cd /安装目录/instantclient_11_2/ ln -s libclntsh.so.11.1 libclntsh.so

  2. 安装cx_Oracle:

    pip install cx_Oracle-6.0rc1-cp36-cp36m-win_amd64.whl

  3. 验证安装是否成功:

    import cx_Oracle 或 python -c "import cx_Oracle"

注意:

1、Oracle数据库服务器端和Python编码方式不一致时会导致读取的中文文本乱码,可以通过设置NLS_LANG环境变量解决这一问题。

2、cx_Oracle模块会读取系统的path环境变量,寻找所需Oracle客户端文件,将path指向新下载的64位即时客户端,这样就可以解决系统中已有的Oracle11g - 32位版客户端与64位Python不兼容的冲突问题。

环境变量设置: 解决查询汉字出现乱码的问题

import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
os.environ['path'] = 'C:/instantclient_11_2/' # 解压的目录路径

连接Oracle数据库

  • 连接数据库:
import cx_Oracle
# 方式一:
tns = cx_Oracle.makedsn(locahost, port, database)
db = cx_Oracle.connect(user, pwd, tns)
# 方式二:
db = cx_Oracle.connect('username','password','locahost/database')
# 方式三:
db = cx_Oracle.connect('用户名/密码@IP:端口号/database')
  • 创建操作游标:
cursor = db.cursor()   # 用于进行 SQL 操作
  • 关闭数据库:
cursor.close()  # 关闭游标
db.close() # 关闭数据库
  • SQL 查询:
方式一:
cursor.execute("Select member_id from member") 方式二:
sqlstr = "Select member_id from member where dt =:1 and id =:2"
datatuplp = ('2021-02-08', '123456789')
cursor.execute(sqlstr, datatuplp) 方式三:
cursor.prepare("""select * from tb_user where id <= :id""")
cursor.execute(None,{'id':5})
for row in cursor: #相当于fetchall()
print(row)
  • 创建表格:
sql = 'create table tb_user(id number, name varchar2(50),password varchar(50),primary key(id))'
cursor.execute(sql)
  • 插入数据:
#插入一条记录
cursor.execute("""insert into tb_user values(1,'admin','password')""") #再插入一条数据
param={'id':2,'n':'admin','p':'password'}
cursor.execute('insert into tb_user values(:id,:n,:p)',param) #一次插入多条数据,参数为字典列表形式
param=[{'id':3,'n':'admin','p':'password'},{'id':4,'n':'admin','p':'password'},{'id':5,'n':'admin','p':'password'}]
cursor.executemany('insert into tb_user values(:id,:n,:p)',param) #再一次插入多条数据
param=[];
#生成5条插入数据,参数为元组列表形式
for i in range(6,11): # [6,7,8,9,10]
param.append((i,'user'+str(i),'password'+str(i)))
#插入数据
cursor.executemany('insert into tb_user values(:1,:2,:3)',param)

python访问Oracle数据库相关操作的更多相关文章

  1. python对oracle数据库的操作

    1          Oracle数据库 1.1       Oracle环境配置&客户端连接 1.1.1          下载安装Oracle绿色版客户端instantclient: 到o ...

  2. 【转】Python访问oracle数据库,DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found"

    使用python连接Oracle,出现如下错误: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified ...

  3. 在代码生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,实现免安装Oracle客户端,兼容32位64位Oracle驱动

    由于我们开发的辅助工具Database2Sharp需要支持多种数据库,虽然我们一般使用SQLServer来开发应用较多,但是Oracle等其他数据库也是常用的数据库之一,因此也是支持使用Oracle等 ...

  4. python链接oracle数据库以及数据库的增删改查实例

    初次使用python链接oracle,所以想记录下我遇到的问题,便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节. 1.首先,python链接oracle数据库需要配置好环境. 我的相关环境 ...

  5. Oracle数据库一些操作信息

    Oracle数据库如何查看当前用户角色权限及默认表空间查看当前用户的一些信息,包括用户拥有的角色权限信息.用户表空间以及用户和默认表空间的关系等--查看用户的角色权限1.查看当前用户拥有的角色权限信息 ...

  6. python——连接Oracle数据库

    前言 Python自带的模块中有很多操纵文件的.我们可以把文件的数据读出来,经过处理还可以将数据写入文件中.但是对于数据的管理和分析来说,数据库还是专业一些.如果Python能和数据库结合在一起,那么 ...

  7. .net(C#)访问Oracle数据库的几种免安装组件的对比

    Oracle 数据存取组件(ODAC) 库为Borland Delphi,C++ Builder 以及 Kylix提供了一些非可视化的组件.它们用来存取Oracle关系数据库系统.与BDE类似, OD ...

  8. 用JDBC访问ORACLE数据库 关于commit 增快效率 大数据 等的整理

    1.问:用JDBC访问ORACLE数据库,做DELETE操作,能用JAVA多线程实现吗? ORACLE服务器要怎么配?(以下答案来自网络,仅供参考) 答: Oracle有自己的锁机制.就算你开100条 ...

  9. .net(C#)访问Oracle数据库的几种免安装组件的对比(转)

    原文地址 [内容为转载,个人推荐还是用官方的组件,推荐使用 Oracle.DataAccess.dll ] .net(C#)编程过程中,使用到了以下三种免安装的Oracle访问组件,能够不安装Orac ...

随机推荐

  1. (十四)json、pickle与shelve模块

    任何语言,都有自己的数据类型,那么不同的语言怎么找到一个通用的标准? 比如,后端用Python写的,前端是js,那么后端如果传一个dic字典给前端,前端肯定不认. 所以就有了序列化这个概念. 什么是序 ...

  2. 【Docker】CentOS7 上无网络情况下安装

    自建虚拟机,但是连接不上网络,只能通过下载rpm包进行安装docker 环境:CentOS 7.3.1611 x64 rpm镜像下载地址用的阿里的https://mirrors.aliyun.com/ ...

  3. cursor pin s和cursor pin s wait on x

    1.cursor pin s是一个共享锁,一般情况下是因为发生在SQL短时间内大量执行 案例:在生产库中,突然出现大量的cursor pin s的等待,询问是否有动作后,同事说有编译存储过程(被误导了 ...

  4. git创建分支并关联远程分支

    1.新建本地分支: 如图,再输入你的分支名字,然后选择从哪个远程分支拉代码,如选择master 至此本地分支创建完成. 2.关联远程分支: (1).先输入git branch -vv,看看分支与远程分 ...

  5. Ice系列--强大如我IceGrid

    前言 IceGrid是一个提供服务定位和服务激活的组件,但它的功能远不止于此.从它的命名可以看出它的设计理念-网格计算(grid computing).网格计算被定义为由一系列关联的廉价计算机组成的计 ...

  6. windows_myql 安装与卸载详细讲解,

    windows_myql 安装 注意: 安装前把 所有杀毒软件,安全卫士等关闭. 打开下载的mysql安装文件双击解压缩,运行"mysql-5.5.40-win64.msi". 注 ...

  7. 2021年【线上】lammps分子动力学技术实战培训班

    材料模拟分子动力学课程 3月19号--22号 远程在线课 lammps分子动力学课程 3月12号--15号 远程在线课 第一性原理VASP实战课 3月25号-28号 远程在线课 量子化学Gaussia ...

  8. Python編碼格式錯誤解決方案及案例

    Python格式錯誤解決方案及案例 這幾天在玩爬蟲,在解析和提取内容時經常出現由於内容格式問題導致出錯,為防止以後出錯,整下一下,以下是這幾天的總結: 1. 特殊符號或表情符號等 背景:爬取一個烹飪教 ...

  9. MFA

    什么是 MFA?_启用和解绑MFA_账号常见问题_账号管理-阿里云 https://help.aliyun.com/knowledge_detail/37215.html

  10. git database 数据库 平面文件 Git 同其他系统的重要区别 Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异 Git 的设计哲学

    小结: 1.如果要浏览项目的历史更新摘要,Git 不用跑到外面的服务器上去取数据回来 2.注意 git clone  应指定版本,它复制的这个版本的全部历史信息: 各个分支  git init 数据库 ...