zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【Python Oracle】使用cx_Oracle 连接oracle的简单介绍

PythonOracle连接 简单 介绍 CX 使用
2023-09-14 08:57:29 时间
db1=cx_Oracle.connect(yang,yang,127.0.0.1:1523/yangdb) db2=cx_Oracle.connect(yang/yang@127.0.0.1:1523/yangdb) 对于dsn 方式: makedsn(IP/HOST,PORT,TNSNAME) dsn=cx_Oracle.makedsn(127.0.0.1,1523,yangdb) db3=cx_Oracle.connect(yang,yang,dsn) oracle@rac3:/home/oracle/python vim conndb4.py  import cx_Oracle username = "yang" pwd = "yang" --建立连接 dsn=cx_Oracle.makedsn(127.0.0.1,1523,yangdb) db1=cx_Oracle.connect(username,pwd,dsn) --获取游标 cursor = db1.cursor()  --执行查询 sql = "select * from tab"  cursor.execute(sql) --获取数据 ,可以有多种方式 fetchall(),fetchmang(N)(N 为正整数),fetchone() result = cursor.fetchall()  count = cursor.rowcount  print "====================="  print "Total:", count  print "====================="  for row in result:          print row  cursor.close db1.close()    oracle@rac3:/home/oracle/python python conndb4.py  ===================== Total: 9 ===================== (BIG_TABLE, TABLE, None) (BIN$sgD3dAkmWHfgQPoK8Qcq3Q==$0, TABLE, None) (BIND, TABLE, None) (IM_SMS_ADD_FRIEND, TABLE, None) (PARALTAB, TABLE, None) (T1, TABLE, None) (T2, TABLE, None) (T3, TABLE, None) (T4, TABLE, None) 1  分析: cx_Oracle.Cursor.parse([statement]) 在执行语句之前对其进行验证,当此类语句检测出错误的时候,会引发DatabaseError异常 a cx_Oracle.Cursor.execute(statement,[parameters],**keyword_parameters) 此方法可以接受单个参数--一条sql语句直接针对数据库来运行。通过parameters或keyword_parameters 参数赋值的绑定变量可以指定为字典,学列或者一组关键字参数。如果已经提供了字典或关键字参数,那么这些值将与名称绑定。如果给出的是序列,将根据这些值的位置对他们进行解析。如果是查询操作,此方法返回一个变量对象列表;如果不是则返回None b cx_Oracle.Cursor.executemany(statement,parameter) 对于批量插入尤其有用,因为操作的数量限制为仅仅一个。 3 获取 仅仅适用于查询--DDL,DCL 语句不返回结果。在不执行查询的游标上,这些方法将引发InterfaceError异常 3.1 cx_Oracle.Cursor.fetchall() 以字节组列表形式获取结果集中的所有剩余行,如果没有剩余行。它返回一个空白列表。获取操作可以通过设置游标的arraysize 属性进行调整,该属性可以设置在每个底层请求中从数据库中返回的行数。arraysize 的设置越高,需要在网络中往返传输的次数越少,arraysize 的默认值为1. 3.2 cx_Oracle.Cursor.fetchmany(N) 从数据库中获取N行。默认为arraysize的值。如果N的值大于获取到的行的数目,该方法获取的行数是真实的行数。 oracle@rac3:/home/oracle/python cat conndb2.py  import cx_Oracle username = "yang"  pwd = "yang"  db1=cx_Oracle.connect(username,pwd,127.0.0.1:1523/yangdb) cursor = db1.cursor()  sql = "select * from tab"  cursor.execute(sql)  result = cursor.fetchmany(5)  oracle@rac3:/home/oracle/python python conndb2.py  ===================== Total: 5 ===================== (BIG_TABLE, TABLE, None) (BIN$sgD3dAkmWHfgQPoK8Qcq3Q==$0, TABLE, None) (BIND, TABLE, None) (IM_SMS_ADD_FRIEND, TABLE, None) (PARALTAB, TABLE, None) 3.3cx_Oracle.Cursor.fetchone() 获取一个行数据,单个字节组。如果无剩余行则返回none。 oracle@rac3:/home/oracle/python cat conndb2.py     import cx_Oracle username = "yang" pwd = "yang" db1=cx_Oracle.connect(username,pwd,127.0.0.1:1523/yangdb) cursor = db1.cursor() sql = "select * from tab" cursor.execute(sql) result = cursor.fetchmany(1)  count = cursor.rowcount print "=====================" print "Total:", count print "=====================" for row in result:         print row cursor.close db1.close() oracle@rac3:/home/oracle/python python conndb2.py  ===================== Total: 1 ===================== (BIG_TABLE, TABLE, None) 4 绑定变量模式 cx_Oracle 支持oracle绑定变量的特性 bind_val={dept_id:20,sal:700} query1=cursor.execute(select * from emp where deptno=:dept_id and salary :sal,bind_val) query2=cursor.execute(select * from emp where deptno=:dept_id and salary :sal,bind_val,dept_id=20,sal=700) 可以使用print coursor.bindnames()来查看绑定变量的值。 oracle@rac3:/home/oracle/python python conndb4.py  ===================== Total: 5 ===================== (7369, SMITH, CLERK, 7902, datetime.datetime(1980, 12, 17, 0, 0), 800.0, None, 20) (7566, JONES, MANAGER, 7839, datetime.datetime(1981, 4, 2, 0, 0), 2975.0, None, 20) (7788, SCOTT, ANALYST, 7566, datetime.datetime(1987, 4, 19, 0, 0), 3000.0, None, 20) (7876, ADAMS, CLERK, 7788, datetime.datetime(1987, 5, 23, 0, 0), 1100.0, None, 20) (7902, FORD, ANALYST, 7566, datetime.datetime(1981, 12, 3, 0, 0), 3000.0, None, 20) bind_val={dept_id:20,sal:700}  cursor.execute(select * from emp where deptno=:dept_id and sal :sal,bind_val) 该过程使用的变量为: [DEPT_ID, SAL]
项目主要使用oracle但是我不太喜欢其他编程语言,加上可能需要用python部署算法包,从oracle表中读出数据,处理完成后在放回oracle中去,所以在windows上就想到先用python试一下,自然搜到了cx_oracle(一个按照Python DB API的oracle的实现,如MySQL、PostgreSQL等,只需要安装相应的软件包即可,流程及操作接口都与cx_Oracle基本一致),下面就简单解释一下怎么用这个包进行增删改查。
Python中通过cx_oracle操作ORACLE数据库的封闭函数 哈哈,看来我的SQL自动化发布,马上就全面支持ORACLE,MYSQL,POSTGRESQL,MSSQL啦。。。 http://blog.csdn.net/swiftshow/article/details/7383481 def Oracle_Exec(SqlStr): Execute oracle command conn = cx_Oracle.