Python访问Oracle数据库cx_Oracle包介绍
介绍:
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包介绍相关推荐
- python访问数据库如何解决高并发_使用 Python 和 Oracle 数据库实现高并发性
随着趋势发展的核心转向更多而不是更快发展,最大限度地提高并发性的重要性日益凸显.并发性使得编程模式发生了新的转变,可以编写异步代码,从而将多个任务分散到一组线程或进程中并行工作.如果您不是编程新手并且 ...
- Python操作Oracle数据库:cx_Oracle
1 安装与导入 Python操作Oracle数据库多用cx_Oracle这个第三方扩展,总体而言,cx_Oracle的使用方式与Python操作MySQL数据库的pymysql库还是很相似的,如果还没 ...
- python连oracle数据库参数变量_带绑定字符串变量的Python cx_Oracle SQL
我在使用Python为Oracle数据库创建SQL查询时遇到了一个问题. 我想绑定字符串变量,但它不起作用,你能告诉我我做错了什么吗? 这是我的代码:import cx_Oracle dokList ...
- 访问Oracle数据库的四款工具软件介绍
本文由Markdwon语法编辑器编辑完成. 1. Oracle数据库介绍: 关于Oracle数据库,以及它和MySQL, SQL Server等其他数据库的介绍和区别,可以查看以下来自知乎的链接. h ...
- python安装要装oracle,python安装oracle数据库
Python中通过cx_Oracle访问数据库遇到的问题总结 以下是Python中通过cx_Oracle操作数据库的过程中我所遇到的问题总结,感谢我们测试组的前辈朱勃给予的帮助最终解决了下列两个问题: ...
- python读取oracle数据库中文乱码_PL/SQL连接Oracle数据库,中文乱码,显示问号
PL/SQL连接oracle数据库 1.简单介绍 在不安装oracle数据库的情况下使用pl/sql连接远程oracle数据库. 2.详细步骤: a) 安装PL/SQL.依据自己的操作系统安 ...
- Python连接Oracle数据库,以字典形式返回结果
众所周知,Python连接Oracle数据库,一般都使用cx_Oracle这个包. 但关键是cx_Oracle这个包,返回的结果,都是元组或者列表. 如以下代码: 1 import cx_Oracle ...
- 【Oracle】Python 连接Oracle 数据库
From: http://space.itpub.net/22664653/viewspace-711728 Python 连接Oracle 数据库,需要使用cx_Oracle 包. 1 下载cx_O ...
- python操作Oracle数据库
1. 准备工作 ① 首先,你必须安装好Oracle数据库.Oracle数据库的安装并不是那么容易,大家可以去找一个安装教程,慢慢研究. ② 其次,你既然用Python操作Oracle,你必须要安装Py ...
- python连接本机oracle数据库吗,用Python连接Oracle数据库容易吗?
ello,大家好!本次介绍的内容是如何使用Python连接Oracle数据库!看起来很简单,但实际上就是这么简单.学习本节内容后,相信老铁们能用Python撸起你们那庞大的Oracle数据库了.Wel ...
最新文章
- IOS获取焦点页面上移问题
- 汇编语言学习-寄存器(CPU工作原理)
- java规则表达式_Java基础--正则表达式的规则
- perl6 HTTP::UserAgent (2)
- bytes数组转string指定编码_好程序员Java学习路线分享Java基础之string
- C语言项目源码2022必看必学版
- 像幅、像素数、像素尺寸关系
- HTML实例--制作表单
- iphone导出视频 无法连接到设备_爱思助手无法识别设备或者连接超时解决办法...
- OneApiConnect(一) Fins欧姆龙通讯协议实现源代码
- Mac访达查看隐藏文件的快捷键、命令行设置两种方式
- Android性能优化的问题
- html5人脸拼图,layout拼图
- 全网史上最全的AR学习开发资源汇总(转载他人整理作品,供参考)
- 天堂2 mysql一闪而过_天堂2革命闪退怎么办_天堂2革命彻底解决游戏闪退方法_手心游戏...
- 前端单元测试到底要怎么写?看这一篇就够了
- 原创超简单代码(1.19.80)
- 也不能在你喝醉的时候假装很生气的臭骂一顿
- 全球及中国车轮强力旋压机行业研究及十四五规划分析报告
- php打开excel文件,PHP读取Excel文件的简单示例
热门文章
- Makefile,简介及其基本用法(笔记)
- Qt下基于QUdpSocket实现指定源组播
- setupdigetclassdevs没找到usb_18元超廉价便携GPS!差点翻车的追随者GPS改装USB供电
- [转]vimtutor——vim官方教程
- 企业微信客服自动回复消息、超链接、跳转公众号亲测可用
- GitLab拉去远程分支到本地
- 社群运营五行落地系统(三)破译流量爆破核心 拥有源源不断精准流量
- 力扣 77 组合(回溯算法)
- 《白帽子讲WEB安全》学习笔记之第17章 安全开发流程(SDL)
- Intel E3-1230V2 华硕ASUS P8B-C RAID10 2T安装红帽RHEL5.8企业版的过程实录