2019-01-25【python】与Oracle数据库连接

参考文章:https://www.cnblogs.com/Leo_wl/p/3288402.html

一、数据库访问的目的

  • 解决并发问题
  • 快速复杂检索
  • 大数据的管理和访问

二、所需模块

cx_Oracle
Python一个官方网站PyPI,上面有丰富的模块。cx_Oracle就可以在PyPI中下载。打开PyPI的网址https://pypi.python.org/pypi,在里面搜索cx_Oracle,即可找到该模块,其下载地址为http://cx-oracle.sourceforge.net/。当然也可以通过其它的途径下载。

三、使用步骤

  1. 引用模块
    import cx_Oracle
  2. 连接数据库
    conn = cx_Oracle.connect('load/123456@localhost/ora11g')
  3. 获取游标
    c=conn.cursor
  4. 使用cursor进行各种操作
    x=c.execute('select sysdate from dual')
    x.fetchone () # 使用fetchone 或fetchall将执行结果读出来
  5. 关闭连接
    c.close()

四、执行SQL语句例子

#引入数据库模块
import cx_Oracle
#连接数据库
conn = cx_Oracle.connect()
#创建一个简单的数据库表,插入数据
conn.execute(r"CREATE TABLE mytable(id int PRIMARY KEY, name varchar(20))")
conn.execute(r"INSERT INTO mytable(id, name) values(1,'abc')

# 查询数据
#获取游标
curs = conn.cursor()
#定义一个查询语句
query = r"select * from mytable"
#执行查询
curs.execute(query)

#从游标中获取数据
#获取字段名
names = [f[0] for f in curs.description]
print(names)
#逐行取出数据
for row in curs.fetchall():
  for pair in zip(names, row):
    print("%s:%s" %pair)

执行后用commit提交

cursor的属性

  • rowcount 数据量
  • description
  • arraysize 用fetchmany返回的行数
  • callproc 调用存储过程
  • close 关闭cursor
  • executemany 对序列中的每个参数执行SQL操作
  • commit 提交事务
  • rollback 回滚事务

五、调用存储过程和方法

--存储过程代码:
CREATE OR REPLACE PROCEDURE P_DEMO(V1 IN VARCHAR2, V2 OUT VARCHAR2) IS
BEGIN
    V2 := V1;
END;
#Python代码:
import cx_Oracle                                          
conn=cx_Oracle.connect('load/123456@localhost/ora11g')  
c=conn.cursor()   
str1='nice'
str2='    '#需要有值,即len(str2)>=len(str1)                                        
x=c.callproc('p_demo',[str1,str2])
print(str2)                   
c.close()                                                 
conn.close() 

调用存储过程使用的是cursor.callproc方法。上面的存储过程中,一个变量的值是OUT型的,在Python中,对OUT型的变量赋值,主要该变量的长度不能小于存储过程中的。

--函数代码:
CREATE OR REPLACE function F_DEMO(V1 VARCHAR2) RETURN VARCHAR2 IS
BEGIN
    RETURN V1;
END;
#Python代码:
import cx_Oracle                                          
conn=cx_Oracle.connect('load/123456@localhost/ora11g')  
c=conn.cursor()   
str1='nice'                                     
str2=c.callfunc('f_demo',cx_Oracle.STRING,[str1])
print(str2)                   
c.close()                                                 
conn.close()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容