cx_Oracle操作Oracle数据库 分类: database 2014-03-07 17:39 2923人阅读 评论(1) 收藏
2014-03-07 17:39
701 查看
ORACLE_SID参数,这个参数是操作系统中用到的,它是描述我们要默认连接的数据库实例,对于一个机器上有多个实例的情况下,要修改后才能通过 conn / as sysdba连接,因为这里用到了默认的实例名。
简而言之,打个比方,你的名字叫小明,但是你有很多外号。你父母叫你小明,但是朋友都叫你的外号。
这里你的父母就是oracle实例,小明就是sid,service name就是你的外号。
sid用于实例区分各个数据库,service name用于外部链接。 它们可能是不同的,要注意你得到的是哪个名字,合理使用,否则远程连接别的数据库可能出错。
前言
Python自带的模块中有很多操纵文件的。我们可以把文件的数据读出来,经过处理还可以将数据写入文件中。但是对于数据的管理和分析来说,数据库还是专业一些。如果Python能和数据库结合在一起,那么就能结合两种的优势,提高效率。工作中使用的是Oracle数据库,Python有一个模块cx_Oracle可以与Oracle相连。要使用cx_Oracle,就要先下载。
1. 下载cx_Oracle
Python一个官方网站PyPI,上面有丰富的模块。cx_Oracle就可以在PyPI中下载。打开PyPI的网址https://pypi.python.org/pypi,在里面搜索cx_Oracle,即可找到该模块,其下载地址为http://cx-oracle.sourceforge.net/。当然也可以通过其它的途径下载。下载之后就可以使用了。
2. 使用流程
简单的使用流程如下:1.引用模块cx_Oracle
2.连接数据库
3.获取cursor
4.使用cursor进行各种操作
5.关闭cursor
6.关闭连接
下面是一个简单的例子:
cx_Oracle.connect("用户名 / 密码@ Oracle服务器IP / Oracle的SERVICE_NAME")
获得 Oracle的SERVICE_NAME:
su - oracle #切换至oracle用户
env | grep ORACLE #查询ORACLE的环境变量
ORACLE_SID=benguo # benguo就是SERVICE_NAME
import cx_Oracle #引用模块cx_Oracle conn=cx_Oracle.connect('load/123456@localhost/ora11g') #连接数据库 c=conn.cursor() #获取cursor x=c.execute('select sysdate from dual') #使用cursor进行各种操作 x.fetchone() c.close() #关闭cursor conn.close() #关闭连接
#例子:
#coding:utf-8
import cx_Oracle
def main():
conn = cx_Oracle.connect("zebra/zebra@192.168.0.113/benguo")
cur =conn.cursor()
r= cur.execute("select * from userinfo")
print
print r.fetchone()
if __name__ == '__main__':
main()
3. 几种用法
Python对数据库的操作主要有2方面:一个是写数据,一个是读数据。这2个方面的实现可以通过SQL语句实现,也可以通过存储过程实现。所以cx_Oracle的主要用法有:1. 执行SQL语句
2. 调用存储过程和函数。
4. 执行SQL语句
执行SQL语句很简单,从上面的例子就可以看出。使用cursor.execute即可执行。使用fetchone或fetchall即可将执行结果读出来。下面一个例子是Insert语句,使用的变量绑定。
import cx_Oracle conn=cx_Oracle.connect('load/123456@loaclhost/ora11g') c=conn.cursor() x=c.execute('insert into demo(v) values(:1)',['nice']) conn.commit(); c.close() conn.close()
变量绑定和Oracle的动态SQL一样,都是冒号将占位符,即代码中的:1,对变量的复制就是传入一个List,即代码中的['nice']。有多少个变量,list中就应该对应多少个值,数目要一致,否则会报错。
执行之后,可以使用连接的一个方法connect.commit(),将事务提交。
5. 调用存储过程和方法
直接上代码:--存储过程代码: 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()
调用函数使用的方法是cursor.callfunc。这个与调用存储过程不同之处在于,它需要指定传输参数的类型。
结束
通过cx_Oracle,可以是Python与Oracle数据库相互沟通,这样两者就可以长处互补。比如,可以将Python当成一个数据收集的工具,可以从Web,从文件中获取数据,然后将这些数据保存到Oracle数据库中,在Oracle数据库上进行数据的进一步分析。
相关文章推荐
- cx_Oracle获取表列名 分类: database 2014-03-11 12:53 886人阅读 评论(0) 收藏
- 【转载】linux中误删除oracle数据文件的恢复操作 分类: H2_ORACLE 2013-06-14 12:07 353人阅读 评论(0) 收藏
- 在ORACLE中获取表名和列名 分类: database 2014-03-11 14:26 251人阅读 评论(0) 收藏
- case when 批量条件处理 分类: database 2014-03-07 13:05 286人阅读 评论(0) 收藏
- oracle 数据库转换成mysql工具:ora2mysqcn 分类: database 2013-08-14 10:21 541人阅读 评论(0) 收藏
- 常用文件操作 分类: C# 2014-10-14 16:18 108人阅读 评论(0) 收藏
- 对象归档操作(一) 分类: ios开发 2014-12-12 12:04 155人阅读 评论(0) 收藏
- MySQL是什么玩意儿(一)基本操作 分类: MySQL 2014-04-25 19:47 105人阅读 评论(0) 收藏
- Oracle垃圾数据清理相关问题 分类: Oracle 2015-08-06 11:14 12人阅读 评论(0) 收藏
- GoldenGate系统三:trouble shooting and log 分类: H2_ORACLE 2013-05-16 10:56 853人阅读 评论(0) 收藏
- 定位导致物化视图无法快速刷新的原因 分类: H2_ORACLE 2013-08-08 23:04 335人阅读 评论(0) 收藏
- GPIO操作之C语言篇 分类: 嵌入式开发学习 2014-06-29 09:26 248人阅读 评论(0) 收藏
- Android数据库Cursor操作:I… 分类: Android数据存储 2014-05-30 10:58 70人阅读 评论(0) 收藏
- 启用事务操作,解决批量插入或更新sqlite,mssql等数据库耗时问题 分类: .NET 2015-06-18 14:39 31人阅读 评论(0) 收藏
- linux 块操作 分类: ubuntu python 2013-06-18 14:38 262人阅读 评论(0) 收藏
- mysql中文乱码问题 分类: database 2013-08-15 14:03 330人阅读 评论(0) 收藏
- python 操作windows下的目录 分类: python python基础学习 2013-07-30 17:30 274人阅读 评论(0) 收藏
- Oracle EM错误,java.lang.Exception: Exception in sending Request :: null 分类: Oracle 2015-07-08 21:24 44人阅读 评论(0) 收藏
- win9x_win2k下对物理磁盘的操作 分类: VC++ 磁盘的扇区读写 2014-08-27 09:55 421人阅读 评论(0) 收藏
- Oracle 字符集的查看和修改 分类: H2_ORACLE 2013-06-19 16:52 316人阅读 评论(0) 收藏