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

简介:
连接数据库的几种方式:
语法:
cx_Oracle.connect('username','pwd','IP/HOSTNAME:PORT/TNSNAME')
import cx_Oracle
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异常
2 执行
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']
相关文章
|
7月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
1501 28
|
8月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
8月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
269 68
|
8月前
|
SQL 关系型数据库 数据库连接
|
测试技术 API 数据安全/隐私保护
Python连接到Jira实例、登录、查询、修改和创建bug
通过使用Python和Jira的REST API,可以方便地连接到Jira实例并进行各种操作,包括查询、修改和创建Bug。`jira`库提供了简洁的接口,使得这些操作变得简单易行。无论是自动化测试还是开发工作流的集成,这些方法都可以极大地提高效率和准确性。希望通过本文的介绍,您能够更好地理解和应用这些技术。
1110 0
|
SQL Oracle 关系型数据库
Python连接Oracle
Python连接Oracle
168 0
|
运维 关系型数据库
Oracle-08:连接查询
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------   首先提供数据库脚本,供测试使用 create table DEPT ( deptno NUMBER(2) not null, dname VARCHAR2(20), ...
1037 0
|
SQL Oracle 关系型数据库