作为Python语言中的一个重要的扩展库,cx_Oracle是Python语言连接Oracle数据库的标准库之一。它基于Oracle客户端库,能够通过Python代码实现对Oracle数据库的连接和操作。本文将为大家介绍cx_Oracle常用语法及应用,帮助读者轻松玩转数据库。
### cx_Oracle安装
在使用cx_Oracle前,需要安装Oracle客户端库和Python包cx_Oracle。可以通过以下步骤实现:
#### 1. Oracle客户端库安装
首先需要从Oracle官网下载Oracle客户端库。在下载时请注意选择正确版本的操作系统和Oracle版本。
#### 2. Python包cx_Oracle安装
可以通过pip或conda安装cx_Oracle:
“`python
pip install cx_Oracle
或
```python
conda install cx_Oracle
### cx_Oracle连接Oracle数据库
连接Oracle数据库需要以下信息:
– 用户名
– 密码
– 数据库名
– 主机名
– 端口号
连接示例:
“`python
import cx_Oracle
try:
dsn = cx_Oracle.makedsn(host=’hostname’,port=port,sid=’ORCL’)
con = cx_Oracle.connect(user=’username’,password=’pwd’,dsn=dsn)
print(‘连接成功’)
except cx_Oracle.DatabaseError as e:
print(‘连接失败,错误信息:{}’.format(e.args[0]))
### cx_Oracle查询数据
在cx_Oracle中,查询数据的主要方式是通过游标(cursor)实现的。使用游标需要以下步骤:
#### 1. 创建游标
在连接数据库后,可以创建游标,例如:
```python
cursor = con.cursor()
#### 2. 执行SQL语句
在创建游标后,就可以执行SQL语句。
“`python
sql = “SELECT * FROM emp”
cursor.execute(sql)
#### 3. 获取结果
执行SQL语句后,使用fetchone()、fetchmany()或fetchall()获取结果集。
```python
rows = cursor.fetchall()
for row in rows:
print(row)
### cx_Oracle增、删、改数据
在cx_Oracle中,增、删、改数据的方式与查询类似。先创建游标,然后执行SQL语句即可。例如:
“`python
# 插入数据
sql = “INSERT INTO emp (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) VALUES (?,?,?,?,?,?,?,?)”
data = (8001,’LiMing’,’Manager’,7839,’2021-01-01′,20000,2000,10)
cursor.execute(sql,data)
con.commit() # 提交事务
# 修改数据
sql = “UPDATE emp SET JOB=? WHERE EMPNO=?”
data = (‘Clerk’,8001)
cursor.execute(sql,data)
con.commit() # 提交事务
# 删除数据
sql = “DELETE FROM emp WHERE EMPNO=?”
data = (8001,)
cursor.execute(sql,data)
con.commit() # 提交事务
### cx_Oracle存储过程及函数调用
在cx_Oracle中,存储过程和函数的调用与SQL语句的执行方式有所不同。
#### 1. 存储过程调用
存储过程调用示例:
```python
# 创建游标
cursor = con.cursor()
# 定义in和out参数
in_name = 'John'
out_salary = cursor.var(cx_Oracle.NUMBER)
# 调用存储过程
cursor.callproc('my_proc',[in_name,out_salary])
# 获取返回值
print('工资:{}'.format(out_salary.getvalue()))
#### 2. 函数调用
函数调用示例:
“`python
# 创建游标
cursor = con.cursor()
# 调用函数
result = cursor.callfunc(‘my_func’,cx_Oracle.NUMBER,[‘John’])
# 获取返回值
print(‘工资:{}’.format(result))
### cx_Oracle批量数据处理
在数据处理中,有时需要对大量数据进行批量操作,可以使用cursor.executemany()实现。例如:
```python
# 批量插入数据
sql = "INSERT INTO emp (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) VALUES (?,?,?,?,?,?,?,?)"
data = [
(8001,'LiMing','Manager',7839,'2021-01-01',20000,2000,10),
(8002,'ZhangSan','Clerk',7788,'2021-02-01',15000,1000,20),
(8003,'WangWu','Engineer',7876,'2021-03-01',18000,1500,30)
]
cursor.executemany(sql,data)
con.commit() # 提交事务
### 总结
本文介绍了cx_Oracle的基本语法和应用,包括连接Oracle数据库、查询数据、增、删、改数据、存储过程及函数调用、批量数据处理等。感兴趣的读者可以通过练习来更加熟悉cx_Oracle的应用,玩转数据库。