介绍: 

cx_Oracle 包为 Python API 提供了访问 Oracle 数据库的工具。
您可以使用 pip 命令安装此软件包。
Python 程序调用 cx_Oracle 函数。python 和 oracle 之间的连接是使用 cx_oracle inbuild Oracle 客户端库建立的。
用户应在机器上安装 Oracle 客户端库。

cx_Oracle 包安装

给定的命令将用于安装 cx_Oracle 包。
需要 oracle 客户端库来执行与数据库的 python 应用程序连接。

pip install cx_Oracle

我们如何与 Oracle 建立联系?

要访问 oracle 数据库,我们需要导入 cx_Oracle 包。
与 oracle 建立连接需要用户名、密码和连接字符串。
cx_Oracle 连接方法将用于传递您在 tnsnames.ora 文件中配置的用户名、密码和连接字符串。

import cx_Oracle# connection string
con = cx_Oracle.connect('pydb/pydb@xe')
print(con.version)
con.close()

为什么要关闭连接?

需要关闭程序占用的资源。
资源需要显式关闭以释放数据库资源。
这是强制关闭所有资源的必要条件。

我们如何使用 cx_Oracle 在 Oracle 数据库中创建表?

从连接创建一个游标对象。
要在数据库中创建雇员表,需要准备 SQL 语句。
要执行 oracle SQL 语句,将使用 cx_Oracle 执行游标方法。

以下是创建表的步骤:

创建连接对象
定义游标
构造查询字符串以创建表
将 oracle 查询传递给游标的执行方法
定义异常以捕获错误。
关闭连接

import cx_Oracletry:# Connecting to DBcon = cx_Oracle.connect('pydb/pydb@xe')# Create a cursorcursor = con.cursor()sql = """create table emp(emp_id number(3),emp_name varchar(30),salary number(6))"""#Execute sql statementcursor.execute(sql)print("Emp table created successfully")except cx_Oracle.DatabaseError as e:print("Problem connecting to Oracle", e)
finally:# Close connectioncursor.close()con.close()

我们如何使用 cx_Oracle 将单个和多个记录插入到 oracle 表中?

从连接创建一个游标对象。该游标将执行数据库插入操作。
将构建具有表和列名称的 SQL 插入语句以执行操作。

将单条记录插入数据库表的步骤:

创建连接对象
定义游标
构造 oracle 查询以在表中执行插入记录操作
将 oracle 查询传递给 cx_Oracle 游标的执行方法
执行提交以保存更改

向数据库表中插入多条记录的步骤:

创建要插入数据库的记录列表。
创建一个循环并遍历每条记录。
执行插入语句一一
提交更改

import cx_Oracletry:# Connecting to DBcon = cx_Oracle.connect('pydb/pydb@xe')# create a cursorcursor = con.cursor()# Define sql statementsql = "insert into emp values(100,'Martin',200)"# Execute the SQL statementcursor.execute(sql)# Do the commit operationcon.commit()print("Table record created successfully")# create a cursorcursor = con.cursor()#Prepare record listemployee_list = [(103, 'Neck', 5000), (104, 'Jones', 5500), (105,'Charl', 6000)]# Iterate loop over a single employeefor emp_rec in employee_list:# Execute the SQL statementcursor.execute("""insert into emp(emp_id,emp_name,salary)values(:emp_id,:emp_name,:salary)""", {'emp_id': emp_rec[0], 'emp_name': emp_rec[1],'salary': emp_rec[2]})# do the commitcon.commit()print("Multiple records are created successfully")except cx_Oracle.DatabaseError as e:print("Problem connecting to Oracle", e)finally:# close connectioncursor.close()con.close()

我们如何使用 cx_Oracle 从 python 中的数据库中获取记录?

以下是将单个记录插入表的步骤:

创建连接对象
定义游标
构造oracle查询以在数据库中执行选择记录操作。
将 oracle 查询字符串传递给 cx_Oracle 游标的执行方法
检索到的数据库记录存储在游标中。
使用 for 循环一次打印一条记录。
fetchall 方法将用于从游标中获取所有记录。
使用 fetchall 方法,所有数据库记录将在一次运行中显示。

import cx_Oracletry:# Connecting to DBcon = cx_Oracle.connect('pydb/pydb@xe')# create a cursorcursor = con.cursor()# prepare the sql statementsql = "select * from emp"# execute the sql statementcursor.execute(sql)# Now print single result at a timefor rows in cursor:print(rows)# display records using fetchallcursor.execute(sql)# using fetchall get all records from cursorresult = cursor.fetchall()# display resultprint(result)except cx_Oracle.DatabaseError as e:print("Problem in database operation", e)
finally:# Close connectioncursor.close()con.close()

如何使用 cx_Oracle 在 python 中执行 oracle 匿名块?

以下是将一条记录插入到 oracle 表中的步骤:

创建一个 cx_Oracle 连接对象定义
一个游标
构造一个匿名块
执行

import cx_Oracletry:# Connecting to DBcon = cx_Oracle.connect('pydb/pydb@xe')# create a cursorcursor = con.cursor()# develop anonymous blockstatement = """begindelete from emp;insert into emp (emp_id, emp_name,salary)values (201, 'Duke',9000);insert into emp (emp_id, emp_name,salary)values (202, 'Pepe',5000);commit;end;"""# execute commit statement cursor.execute(statement)print("Anonymous block executed successfully")except cx_Oracle.DatabaseError as e:print("Problem in database operation", e)
finally:# Close connectioncursor.close()con.close()

我们如何从 python 调用 oracle 函数?

下面是我们从 emp 表中选择数据并返回员工姓名列值的 oracle 函数。
该函数接受员工 ID 作为输入参数,并根据该数据获取数据。

create or replace function get_emp_name(in_emp_id in number) return varchar2is vemp_name varchar2(30);
begin -- fetch employee name based on passed employee idSelect emp_name into vemp_namefrom empwhere emp.emp_id = in_emp_id;-- return employee name  return(vemp_name);
end;

下面是 oracle 函数,其中员工 id 是输入参数,员工姓名是输出参数,并返回工资列值。
get_emp_details 将 emp 名称作为输出参数,将薪水作为返回参数。

create or replace function get_emp_details(in_emp_id in number,out_emp_name out varchar2) return numberis vsalary number(5);
begin -- fetch employee name based on passed employee idSelect emp_name,salary into out_emp_name,vsalaryfrom empwhere emp.emp_id = in_emp_id;-- return employee salary  return(vsalary);
end;

调用oracle函数并显示输出结果的步骤:

创建一个 cx_Oracle 连接对象
定义一个游标
创建一个员工 ID cx_Oracle 对象以将其作为输入参数传递给函数。
创建一个 cx_Oracle 字符串对象变量来存储 oracle 返回的变量。
使用callfunc游标方法以 emp id 作为输入参数调用 oracle 函数,并接收 emp 名称作为输出参数。

以下是调用 oracle 函数并接受输出和返回参数的步骤。

创建一个 cx_Oracle 字符串对象变量来存储 oracle 返回的变量。
调用 get_emp_details 函数并接受函数返回和输出参数值。
我们可以使用 get value 方法显示接收到的输出参数。

import cx_Oracletry:# Connecting to DBcon = cx_Oracle.connect('pydb/pydb@xe')# create a cursorcursor = con.cursor()# define employee idemp_id = 201# define object to store string return valuevemp_name = cursor.var(cx_Oracle.STRING)# call procedure with parametercursor.callfunc('get_emp_name',vemp_name,[emp_id])# print return employee nameprint('return emp_name:',vemp_name.getvalue())# define object to store integer return valuevemp_name = cursor.var(cx_Oracle.STRING)# call procedure with parametervemp_salary = cursor.callfunc('get_emp_details',int,[emp_id,vemp_name])# print the return employee name and salaryprint('return emp_name:',vemp_name.getvalue(),' and employee salary:',vemp_salary)except cx_Oracle.DatabaseError as e:print("Problem in database operation", e)
finally:# Close connectioncursor.close()con.close()

我们如何从 python 调用 oracle 过程?

下面是 oracle 过程 proc_get_emp_details 使用它,我们将为给定的 emp id、emp name 和salary 参数执行插入操作。
执行选择操作以获取员工详细信息。

create or replace procedure proc_get_emp_details(in_emp_id in number,in_emp_name in varchar2,in_emp_salary in number,out_emp_name out varchar2)
is
begin -- perform the ins operationinsert into emp(emp_id,emp_name,salary)values(in_emp_id,in_emp_name,in_emp_salary);commit;-- fetch employee name based on passed employee idSelect emp_name into out_emp_namefrom empwhere emp.emp_id = in_emp_id;end;

调用 oracle 过程并显示输出的步骤:

创建cx_Oracle 连接对象
定义连接游标
定义emp id、emp name 和salary cx_Oracle 对象以在数据库中执行插入操作。
要存储返回输出变量,请创建一个 cx_Oracle 字符串对象。
使用员工 ID、员工姓名和薪水输入参数调用过程 proc_get_emp_details,并接受员工姓名输出参数。

import cx_Oracle
try:# Connecting to DBcon = cx_Oracle.connect('pydb/pydb@xe')# create a cursorcursor = con.cursor()# Defined objects for insert statementemp_id = 203emp_name = 'Pep'emp_salary = 6000# define object to store string return valuevemp_name = cursor.var(cx_Oracle.STRING)# add a new employeecursor.callproc('proc_get_emp_details',[emp_id, emp_name, emp_salary,vemp_name])print('Return emp_name:',vemp_name.getvalue())except cx_Oracle.DatabaseError as e:print("Problem in DB operation", e)
finally:# close db connectionscursor.close()con.close()

我们如何从 python 调用 oracle 包?

在 oracle 包 pkg_emp_details 中,我们在包规范部分定义了一个过程和一个函数。
在 oracle 包正文中,在一个过程中,我们正在更新给定员工 id 输入参数的薪水。
在函数中,我们根据员工 ID 检索员工姓名。

create or replace package pkg_emp_details
as
procedure update_record (in_emp_id in number,in_emp_salary in number);
function fn_get_emp_name (in_emp_id in number) return varchar2;
end pkg_emp_details;
/create or replace package body pkg_emp_details ISprocedure update_record (in_emp_id in number,in_emp_salary in number)asbeginupdate empset salary = in_emp_salarywhere emp_id = in_emp_id;commit;end update_record;function fn_get_emp_name (in_emp_id       in number) return varchar2 ISvemp_name   varchar2(30);begin-- fetch employee name based on passed employee idSelect emp_nameinto vemp_namefrom empwhere emp_id = in_emp_id;-- return employee name  return(vemp_name); end fn_get_emp_name;end pkg_emp_details;
/

调用 oracle 包并显示输出结果的步骤:

创建连接对象
定义游标
定义员工 ID 和薪水对象变量以更新员工数据。
使用emp id 和salary 输入参数调用oracle 过程。
创建一个 cx_Oracle 字符串对象变量来存储函数输出变量。
fn_get_emp_name 函数检索给定 emp id 的 emp 名称。

import cx_Oracle
try:# Connecting to DBcon = cx_Oracle.connect('pydb/pydb@xe')# create a cursorcursor = con.cursor()# Defined objects for update statementemp_id = 203emp_salary = 25000# update a employee salarycursor.callproc('pkg_emp_details.update_record',[emp_id,emp_salary])# define object to store string return valuevemp_name = cursor.var(cx_Oracle.STRING)# call procedure with parametercursor.callfunc('pkg_emp_details.fn_get_emp_name',vemp_name,[emp_id])# print return employee nameprint('return emp_name:',vemp_name.getvalue())except cx_Oracle.DatabaseError as e:print("Problem in DB operation", e)
finally:# close db connectionscursor.close()con.close()

我们如何在python中处理oracle ref cursor?

Oracle 函数 get_emp_data 返回引用游标中的值。
在这个函数中,我们正在获取员工表记录。

create or replace FUNCTION get_emp_dataRETURN SYS_REFCURSOR
ASc_employee SYS_REFCURSOR;
BEGINOPEN c_employee FOR SELECT emp_id, emp_name, salaryFROM emp ORDER BY emp_id;RETURN c_employee;
END;

以下是调用 oracle 包的步骤:

创建一个 cx_Oracle 连接对象
定义一个游标
创建一个 cx_Oracle 游标对象来存储get_emp_data函数返回记录。
创建一个 emp_data 对象来存储返回的员工数据。
使用 for 循环,我们遍历每条记录并显示记录。

import cx_Oracletry:# Connecting to DBcon = cx_Oracle.connect('pydb/pydb@xe')# create a cursorcursor = con.cursor()# define object to store string return valuevemp_data = cursor.var(cx_Oracle.CURSOR)# add a new petcursor.callfunc('get_emp_data',vemp_data)emp_data = vemp_data.getvalue()for emp_rec in emp_data:print('emp_id:',emp_rec[0],' emp_name: ',emp_rec[1], 'salary:',emp_rec[2])except cx_Oracle.DatabaseError as e:print("Problem in database operation", e)finally:# close the connectioncursor.close()con.close()

Python访问Oracle数据库cx_Oracle包介绍相关推荐

  1. python访问数据库如何解决高并发_使用 Python 和 Oracle 数据库实现高并发性

    随着趋势发展的核心转向更多而不是更快发展,最大限度地提高并发性的重要性日益凸显.并发性使得编程模式发生了新的转变,可以编写异步代码,从而将多个任务分散到一组线程或进程中并行工作.如果您不是编程新手并且 ...

  2. Python操作Oracle数据库:cx_Oracle

    1 安装与导入 Python操作Oracle数据库多用cx_Oracle这个第三方扩展,总体而言,cx_Oracle的使用方式与Python操作MySQL数据库的pymysql库还是很相似的,如果还没 ...

  3. python连oracle数据库参数变量_带绑定字符串变量的Python cx_Oracle SQL

    我在使用Python为Oracle数据库创建SQL查询时遇到了一个问题. 我想绑定字符串变量,但它不起作用,你能告诉我我做错了什么吗? 这是我的代码:import cx_Oracle dokList ...

  4. 访问Oracle数据库的四款工具软件介绍

    本文由Markdwon语法编辑器编辑完成. 1. Oracle数据库介绍: 关于Oracle数据库,以及它和MySQL, SQL Server等其他数据库的介绍和区别,可以查看以下来自知乎的链接. h ...

  5. python安装要装oracle,python安装oracle数据库

    Python中通过cx_Oracle访问数据库遇到的问题总结 以下是Python中通过cx_Oracle操作数据库的过程中我所遇到的问题总结,感谢我们测试组的前辈朱勃给予的帮助最终解决了下列两个问题: ...

  6. python读取oracle数据库中文乱码_PL/SQL连接Oracle数据库,中文乱码,显示问号

    PL/SQL连接oracle数据库 1.简单介绍 在不安装oracle数据库的情况下使用pl/sql连接远程oracle数据库. 2.详细步骤: a)      安装PL/SQL.依据自己的操作系统安 ...

  7. Python连接Oracle数据库,以字典形式返回结果

    众所周知,Python连接Oracle数据库,一般都使用cx_Oracle这个包. 但关键是cx_Oracle这个包,返回的结果,都是元组或者列表. 如以下代码: 1 import cx_Oracle ...

  8. 【Oracle】Python 连接Oracle 数据库

    From: http://space.itpub.net/22664653/viewspace-711728 Python 连接Oracle 数据库,需要使用cx_Oracle 包. 1 下载cx_O ...

  9. python操作Oracle数据库

    1. 准备工作 ① 首先,你必须安装好Oracle数据库.Oracle数据库的安装并不是那么容易,大家可以去找一个安装教程,慢慢研究. ② 其次,你既然用Python操作Oracle,你必须要安装Py ...

  10. python连接本机oracle数据库吗,用Python连接Oracle数据库容易吗?

    ello,大家好!本次介绍的内容是如何使用Python连接Oracle数据库!看起来很简单,但实际上就是这么简单.学习本节内容后,相信老铁们能用Python撸起你们那庞大的Oracle数据库了.Wel ...

最新文章

  1. IOS获取焦点页面上移问题
  2. 汇编语言学习-寄存器(CPU工作原理)
  3. java规则表达式_Java基础--正则表达式的规则
  4. perl6 HTTP::UserAgent (2)
  5. bytes数组转string指定编码_好程序员Java学习路线分享Java基础之string
  6. C语言项目源码2022必看必学版
  7. 像幅、像素数、像素尺寸关系
  8. HTML实例--制作表单
  9. iphone导出视频 无法连接到设备_爱思助手无法识别设备或者连接超时解决办法...
  10. OneApiConnect(一) Fins欧姆龙通讯协议实现源代码
  11. Mac访达查看隐藏文件的快捷键、命令行设置两种方式
  12. Android性能优化的问题
  13. html5人脸拼图,layout拼图
  14. 全网史上最全的AR学习开发资源汇总(转载他人整理作品,供参考)
  15. 天堂2 mysql一闪而过_天堂2革命闪退怎么办_天堂2革命彻底解决游戏闪退方法_手心游戏...
  16. 前端单元测试到底要怎么写?看这一篇就够了
  17. 原创超简单代码(1.19.80)
  18. 也不能在你喝醉的时候假装很生气的臭骂一顿
  19. 全球及中国车轮强力旋压机行业研究及十四五规划分析报告
  20. php打开excel文件,PHP读取Excel文件的简单示例

热门文章

  1. Makefile,简介及其基本用法(笔记)
  2. Qt下基于QUdpSocket实现指定源组播
  3. setupdigetclassdevs没找到usb_18元超廉价便携GPS!差点翻车的追随者GPS改装USB供电
  4. [转]vimtutor——vim官方教程
  5. 企业微信客服自动回复消息、超链接、跳转公众号亲测可用
  6. GitLab拉去远程分支到本地
  7. 社群运营五行落地系统(三)破译流量爆破核心 拥有源源不断精准流量
  8. 力扣 77 组合(回溯算法)
  9. 《白帽子讲WEB安全》学习笔记之第17章 安全开发流程(SDL)
  10. Intel E3-1230V2 华硕ASUS P8B-C RAID10 2T安装红帽RHEL5.8企业版的过程实录