1.cx_Oracle概述

cx_Oracle是一个Python 扩展模块,通过使用所有数据库访问模块通用的数据库 API来实现 Oracle 数据库的查询和更新。为使用一些专为 Oracle 设计的特性,还加入了多个通用数据库 API 的扩展。cx_Oracle 的开发历时多年,涵盖了大多数需要在 Python 中访问 Oracle 的客户的需求。

安装cx_Oracle使用pip命令: pip install cx_Oracle

2.连接oracle数据库

cx_Oracle.connect(‘scott’, ‘scott’, ‘127.0.0.1:1521/orcl’)

cx_Oracle.connect(‘scott/scott@127.0.0.1:1521/orcl’)

3.ORACLE的查询

#简单查询

import cx_Oracle

db_conn = cx_Oracle.connect(‘scott’, ‘scott’, ‘127.0.0.1:1521/orcl’)

db_cursor=db_conn.cursor()

sql_cmd=’SELECT * FROM students’

db_cursor.execute(sql_cmd)

for row in db_cursor:

print(row)

db_cursor.close()

db_conn.close()

#带参数查询

db_conn = cx_Oracle.connect(‘scott’, ‘scott’, ‘127.0.0.1:1521/orcl’)

db_cursor=db_conn.cursor()

sql_cmd=’SELECT * FROM students where ID = :id’

sql_p_id={‘id’:2}

db_cursor.execute(sql_cmd,sql_p_id)

for row in db_cursor:

print(row)

db_cursor.close()

db_conn.close()

#获取单行可以使用fetchone函数;获取多行记录,可以使用fetchall函数

import cx_Oracle

db_conn = cx_Oracle.connect(‘scott’, ‘scott’, ‘127.0.0.1:1521/orcl’)

db_cursor=db_conn.cursor()

sql_cmd=’SELECT * FROM students’

db_cursor.execute(sql_cmd)

print(db_cursor.fetchone())

db_cursor.close()

db_conn.close()

4.ORACLE的DML

import cx_Oracle

from datetime import datetime

db_conn = cx_Oracle.connect(‘scott’, ‘scott’, ‘127.0.0.1:1521/orcl’)

db_cursor=db_conn.cursor()

sql_cmd = ‘INSERT INTO students(id, name, age,birth) VALUES(:id, :name, :age,:birth)’

db_cursor.execute(sql_cmd,(11,’王五2′,12,datetime(2017,9,1,12,40,12)))

db_cursor.execute(sql_cmd,(22,’赵六’,12,datetime(2017,9,1,12,40,12)))

db_conn.commit()

db_cursor.close()

db_conn.close()

import cx_Oracle

from datetime import datetime

db_conn = cx_Oracle.connect(‘scott’, ‘scott’, ‘127.0.0.1:1521/orcl’)

db_cursor=db_conn.cursor()

sql_cmd = ‘INSERT INTO students(id, name, age,birth) VALUES(:id, :name, :age,:birth)’

db_cursor.executemany(sql_cmd, [(15, ‘王五2’, 12, datetime(2017, 9, 1, 12, 40, 12)),(16, ‘赵六’, 12, datetime(2017, 9, 1, 12, 40, 12))])

db_conn.commit()

db_cursor.close()

db_conn.close()

5.调用存储过程和函数

–存储过程代码:

CREATE OR REPLACE PROCEDURE P_DEMO(V1 IN VARCHAR2, V2 OUT VARCHAR2) IS

BEGIN

V2 := V1;

END;

#Python代码:

import cx_Oracle

db_conn = cx_Oracle.connect(‘scott’, ‘scott’, ‘127.0.0.1:1521/orcl’)

db_cursor=db_conn.cursor()

str=’abdd’

msg =db_cursor.var(cx_Oracle.STRING)

db_cursor.callproc(‘p_demo’,[str,msg])

db_conn.commit()

print(msg)

print(msg.getvalue())

db_cursor.close()

db_conn.close()

–函数代码:

CREATE OR REPLACE function F_DEMO(V1 VARCHAR2,V2 VARCHAR2) RETURN VARCHAR2

IS

BEGIN

RETURN V1 || v2;

END;

#Python代码:

import cx_Oracle

db_conn = cx_Oracle.connect(‘scott’, ‘scott’, ‘127.0.0.1:1521/orcl’)

db_cursor=db_conn.cursor()

str=db_cursor.callfunc(‘f_demo’,cx_Oracle.STRING,[‘abc’,’ddd’])

print(str)

db_conn.commit()

db_cursor.close()

db_conn.close()