1、安装cx_Oracle库
在安装cx_Oracle之前,确保已经安装了Oracle客户端,并且Python的环境变量已经配置好。
pip install cx_Oracle
2、连接数据库
cx_Oracle.connect()
: 建立与Oracle数据库的连接。
import cx_Oracle # 建立数据库连接
connection = cx_Oracle.connect('username/password@hostname/service_name')
3、创建游标
connection.cursor()
: 创建游标对象以执行SQL语句
# 创建游标对象
cursor = connection.cursor()
4、执行SQL语句
4.1、增加数据
要执行插入操作,可以使用cursor.execute()
方法执行INSERT语句。如果要一次插入多条记录,可以使用cursor.executemany()
方法。以下是一个示例:
# 单条插入
sql = "INSERT INTO employees (employee_id, first_name, last_name) VALUES (:1, :2, :3)"
data = (101, 'John', 'Doe')
cursor.execute(sql, data)
# 单条插入
sql = "INSERT INTO employees (employee_id, first_name, last_name) VALUES (101, 'John', 'Doe')"
cursor.execute(sql)
# 批量插入
sql = "INSERT INTO employees (employee_id, first_name, last_name) VALUES (:1, :2, :3)"
data = [(102, 'Jane', 'Smith'), (103, 'Mike', 'Johnson')]
cursor.executemany(sql, data)
# 提交事务
connection.commit()
4.2、删除数据
要执行删除操作,可以使用cursor.execute()
方法执行DELETE语句。如果要一次删除多条记录,同样可以使用cursor.executemany()
方法。以下是一个示例:
# 单条删除
sql = "DELETE FROM employees WHERE employee_id = :1"
employee_id = 101
cursor.execute(sql, [employee_id])
# 批量删除
sql = "DELETE FROM employees WHERE employee_id = :1"
employee_ids = [102, 103]
cursor.executemany(sql, [(id,) for id in employee_ids])
# 提交事务 connection.commit()
# 单条删除
sql = "DELETE FROM employees WHERE employee_id = 101"
cursor.execute(sql)
# 批量删除
sql = "DELETE FROM employees WHERE employee_id IN (102, 103)"
cursor.execute(sql)
# 提交事务
connection.commit()
4.3、修改数据
要执行更新操作,可以使用cursor.execute()
方法执行UPDATE语句。如果要一次更新多条记录,同样可以使用cursor.executemany()
方法。以下是一个示例:
# 单条更新
sql = "UPDATE employees SET first_name = :1 WHERE employee_id = :2"
data = ('Johnathan', 101)
cursor.execute(sql, data)
# 批量更新 sql = "UPDATE employees SET first_name = :1 WHERE employee_id = :2"
data = [('Janet', 102), ('Michael', 103)]
cursor.executemany(sql, data)
# 提交事务
connection.commit()
# 单条更新
sql = "UPDATE employees SET first_name = 'Johnathan' WHERE employee_id = 101" cursor.execute(sql)
# 批量更新
sql = "UPDATE employees SET first_name = 'Janet' WHERE employee_id = 102" cursor.execute(sql)
# 提交事务
connection.commit()
4.4、查询数据
要执行查询操作,可以使用cursor.execute()
方法执行SELECT语句,并使用cursor.fetchall()
、cursor.fetchone()
或cursor.fetchmany()
方法获取查询结果。以下是一个示例:
# 执行查询操作
cursor.execute('SELECT * FROM employees')
# 获取查询结果
rows = cursor.fetchall()#获取所有查询结果,并遍历打印了每一行数据。
for row in rows:
print(row)
# 获取第一行数据
row = cursor.fetchone()
while row:
print(row)
row = cursor.fetchone()
cursor.fetchmany(size)
:这个方法用于获取指定数量(size)的查询结果行,并将光标移到下一行。如果没有更多的结果就会返回None。 所有的查询都要判断查询结果是否返回None。 While result
判断。
# 执行查询操作
cursor.execute('SELECT * FROM employees')
# 获取前3行数据
rows = cursor.fetchmany(3)
for row in rows:
print(row)
4.5、批量执行SQL语句
批量执行多个SQL语句,可以使用cursor.executescript()
方法批量执行多个SQL语句。以下是一个示例:
# 准备多个SQL语句
sql = """
INSERT INTO employees (employee_id, first_name, last_name) VALUES (104, 'Emily', 'Brown');
UPDATE employees SET first_name = 'Robert' WHERE employee_id = 101;
DELETE FROM employees WHERE employee_id = 103;
"""
# 执行多个SQL语句
cursor.executescript(sql)
# 提交事务
connection.commit()
5、事务管理
# 提交事务
connection.commit()
# 回滚事务
connection.rollback()
6、高级功能
6.1、调用存储过程
# 调用存储过程
cursor.callproc('procedure_name', [param1, param2, out_param])
6.2、处理游标
# 处理游标
out_cursor = connection.cursor()
result = out_cursor.var(cx_Oracle.CURSOR)
cursor.callproc('procedure_with_cursor', [result])
data = result.getvalue().fetchall()
out_cursor.close()