cx_oracle 使用

连接

import cx_Oracle

#使用tnsnames文件别名链接
# ora = cx_Oracle.connect('scott/tiger@orcl')

#使用字符串,传入一个参数链接
# ora = cx_Oracle.connect('scott/tiger@192.168.56.152:1521/orcl')

# 使用字符串,分别传入用户名密码等
# ora = cx_Oracle.connect('scott','tiger','192.168.56.152:1521/orcl')

# 使用dsn解析成tns字符串,连接数据库
# tnsname = cx_Oracle.makedsn('192.168.56.152','1521','orcl')
# ora = cx_Oracle.connect('scott','tiger',tnsname)

#使用sysdba或者其他角色链接
ora = cx_Oracle.connect( 'sys', 'oracle', '192.168.56.152:1521/orcl', mode=cx_Oracle.SYSDBA)


cursor = ora.cursor()

#使用位置对应参数
cursor.execute( 'select  *  from scott.t1 where DEPTNO = :1',( 10,))
print(cursor.fetchall())


cursor.close()
ora.close()



查询
#fetchall
import cx_Oracle

ora = cx_Oracle.connect( 'scott/tiger@192.168.56.152:1521/orcl')
cursor = ora.cursor()

cursor.execute( 'select  *  from emp')

print(cursor.fetchall())

cursor.close()
ora.close()
#fetchone
import cx_Oracle

ora = cx_Oracle.connect( 'scott/tiger@192.168.56.152:1521/orcl')
cursor = ora.cursor()

cursor.execute( 'select  *  from emp')

while  1:
    res = cursor.fetchone()
     if res ==  None:
         break
     print(res)

cursor.close()
ora.close()
#fetchmany

# 使用dsn解析成tns字符串,连接数据库
tnsname = cx_Oracle.makedsn( '192.168.56.151', '1521', 'orcl')
ora = cx_Oracle.connect( 'system', 'oracle',tnsname)

cursor = ora.cursor()

cursor.execute( 'select  *  from dba_objects')
resCount= 0
while  1:
    res = cursor.fetchmany( 10)
     if res == []:
         break
     print(res)
    resCount +=  10

cursor.close()
ora.close()

#使用绑定变量
import cx_Oracle

ora = cx_Oracle.connect( 'scott/tiger@192.168.56.152:1521/orcl')
cursor = ora.cursor()

#使用位置对应参数
cursor.execute( 'select  *  from t1 where DEPTNO = :1',( 10,))
print(cursor.fetchall())

#使用字典传入参数
param={ 'dno': 20}
cursor.execute( 'select  *  from t1 where DEPTNO = :dno',param)
print(cursor.fetchall())
cursor.execute( 'select  *  from t1 where DEPTNO = :dno or DNAME=:dn', dno= 40, dn= 'ACCOUNTING')
print(cursor.fetchall())

cursor.close()
ora.close()

增、删、改 数据和多次执行

import cx_Oracle

#使用tnsnames文件别名链接
# ora = cx_Oracle.connect('scott/tiger@orcl')

#使用字符串,传入一个参数链接
# ora = cx_Oracle.connect('scott/tiger@192.168.56.152:1521/orcl')

# 使用字符串,分别传入用户名密码等
# ora = cx_Oracle.connect('scott','tiger','192.168.56.152:1521/orcl')

# 使用dsn解析成tns字符串,连接数据库
tnsname = cx_Oracle.makedsn( '192.168.56.152', '1521', 'orcl')
ora = cx_Oracle.connect( 'scott', 'tiger',tnsname)

#使用sysdba或者其他角色链接
# ora = cx_Oracle.connect('sys','oracle','192.168.56.152:1521/orcl',mode=cx_Oracle.SYSDBA)
cursor = ora.cursor()

cursor.execute( 'insert into t1 values(50,:1,:2)',( 'DBA', 'CHINA'))   #sql中使用参数


cursor.execute( 'select  *  from t1')
while  1:
    res = cursor.fetchone()
     if res ==  None:
         break
     print(res)


cursor.close()
ora.close()
import cx_Oracle

#使用tnsnames文件别名链接
# ora = cx_Oracle.connect('scott/tiger@orcl')

#使用字符串,传入一个参数链接
# ora = cx_Oracle.connect('scott/tiger@192.168.56.152:1521/orcl')

# 使用字符串,分别传入用户名密码等
# ora = cx_Oracle.connect('scott','tiger','192.168.56.152:1521/orcl')

# 使用dsn解析成tns字符串,连接数据库
tnsname = cx_Oracle.makedsn( '192.168.56.152', '1521', 'orcl')
ora = cx_Oracle.connect( 'scott', 'tiger',tnsname)

#使用sysdba或者其他角色链接
# ora = cx_Oracle.connect('sys','oracle','192.168.56.152:1521/orcl',mode=cx_Oracle.SYSDBA)
cursor = ora.cursor()

cursor.prepare( 'update t1 set LOC=:loc where DEPTNO=:dno')
cursor.execute( None,{ 'loc': 'BEIJING', 'dno': 50})   #使用了prepare函数,在execute里面可以不传入sql语句,直接传入参数。注意:这里的第一个参数必须为None


cursor.execute( 'select  *  from t1')
while  1:
    res = cursor.fetchone()
     if res ==  None:
         break
     print(res)


cursor.close()
ora.close()
import cx_Oracle

#使用tnsnames文件别名链接
# ora = cx_Oracle.connect('scott/tiger@orcl')

#使用字符串,传入一个参数链接
# ora = cx_Oracle.connect('scott/tiger@192.168.56.152:1521/orcl')

# 使用字符串,分别传入用户名密码等
# ora = cx_Oracle.connect('scott','tiger','192.168.56.152:1521/orcl')

# 使用dsn解析成tns字符串,连接数据库
tnsname = cx_Oracle.makedsn( '192.168.56.152', '1521', 'orcl')
ora = cx_Oracle.connect( 'scott', 'tiger',tnsname)

#使用sysdba或者其他角色链接
# ora = cx_Oracle.connect('sys','oracle','192.168.56.152:1521/orcl',mode=cx_Oracle.SYSDBA)
cursor = ora.cursor()

#执行多条语句
list1 = [( 60, 'Enginer', 'Sydney'),( 70, 'Diver', 'South Africa')]
cursor.prepare( 'insert into t1 values(:1,:2,:3)')
cursor.executemany( None,list1)   #使用了prepare函数,在execute里面可以不传入sql语句,直接传入参数。注意:这里的第一个参数必须为None


cursor.execute( 'select  *  from t1')
while  1:
    res = cursor.fetchone()
     if res ==  None:
         break
     print(res)


cursor.close()
ora.close()

调用函数和存储过程

#调用存储过程
cursor.callproc(name,  parameters=[],  keywordParameters={})
#调用函数
cursor.callfunc(name, returnType,  parameters=[],  keywordParameters={})
#cx_Oracle.STRING

cx_Oracle、Python的对象类型之间存在转换关系
Oracle cx_Oracle Python
VARCHAR2, NVARCHAR2, LONG  cx_Oracle.STRING str
CHAR cx_Oracle.FIXED_CHAR str
NUMBER cx_Oracle.NUMBER int
FLOAT cx_Oracle.NUMBER float
DATE cx_Oracle.DATETIME datetime.datetime
TIMESTAMP cx_Oracle.TIMESTAMP datetime.datetime
CLOB cx_Oracle.CLOB cx_Oracle.LOB
BLOB cx_Oracle.BLOB cx_Oracle.LOB







获取中文乱码
import os
os.environ[ 'NLS_LANG'] =  'SIMPLIFIED CHINESE_CHINA.UTF8
#或者os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.AL32UTF8'








来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28572479/viewspace-2152558/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28572479/viewspace-2152558/

cx_Oracle是一个Python的第三方包,用于连接和操作Oracle数据库。它提供了一系列的方法和函数,以便在Python中执行SQL语句、调用存储过程和函数等数据库操作。在使用cx_Oracle时,需要先安装这个包,并根据需要进行配置。 在使用cx_Oracle进行数据库操作时,通常的步骤如下: 1. 导入cx_Oracle模块:使用import cx_Oracle语句导入模块。 2. 建立数据库连接:使用cx_Oracle.connect()函数建立与数据库的连接。需要提供数据库的用户名、密码以及数据库地址等连接信息。 3. 创建游标对象:使用连接对象的cursor()方法创建一个游标对象,用于执行SQL语句和调用存储过程。 4. 执行SQL语句:使用游标对象的execute()方法执行SQL语句。可以通过fetchone()、fetchall()等方法获取查询结果。 5. 调用存储过程和函数:使用游标对象的callproc()方法调用存储过程,通过callfunc()方法调用函数。需要提供存储过程或函数的名称、参数等信息。 6. 关闭游标和连接:使用游标对象的close()方法关闭游标,使用连接对象的close()方法关闭连接。 下面是一个使用cx_Oracle连接和操作Oracle数据库的示例代码: ```python import cx_Oracle # 建立数据库连接 conn = cx_Oracle.connect('用户名/密码@数据库地址/数据库名称') # 创建游标对象 cursor = conn.cursor() # 执行SQL语句 cursor.execute('SELECT * FROM 表名') # 获取查询结果 result = cursor.fetchall() print(result) # 调用存储过程 out_var = cursor.var(cx_Oracle.STRING) cursor.callproc('存储过程名', [参数1, 参数2, out_var]) print(out_var.getvalue()) # 关闭游标和连接 cursor.close() conn.close() ``` 需要注意的是,使用cx_Oracle操作Oracle数据库需要先安装Oracle客户端,并将Oracle客户端的路径配置到系统环境变量中。具体安装和配置过程可以参考cx_Oracle官方文档或相关教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值