Python中通过cx_Oracle访问数据库遇到的问题总结
2016-05-10 18:52
726 查看
以下是Python中通过cx_Oracle操作数据库的过程中我所遇到的问题总结,感谢我们测试组的前辈朱勃给予的帮助最终解决了下列两个问题:
1)安装cx_Oracle会遇到的问题:在Windows下安装cx_Oracle不要尝试用pip install的方式了!下载官网的对应版本的msi安装文件,我的python2.7是32位的,oracle的instantClient也是32位的,这个cx_Oracle也选择32位的下载,安装成功后进入python模式下import cx_Oracle没问题,安装成功。
2)使用cx_Oracle会遇到的问题:在通过cx_Oracle访问数据库的过程中,如果出现“InterfaceError: Unable to acquire Oracle environment handle”的错误!把oracle客户端的所有文件拷贝到“D:\Python27\Lib\site-packages”即Python的安装路径根目录下(因为不知道具体要拷贝哪些,就全拷贝了),如下图所示:
以下是通过cx_Oracle远程访问oracle数据库的方式(保存在本地文件夹下的execute_sql.py文件中):
userInfo这个变量里存的是用户信息,格式为'用户名/密码';
dbStr变量里存的是数据库连接字符串,格式为'@HOST:PORT/SERVICE_NAME'。例子如下:
用户名密码后面那些信息(数据库连接字符串)可在本地oracle客户端文件夹下的“TNSNAMES.ORA”文件中查看,如下图位置所示:
之后在其他的脚本中就可以调用这个数据库访问脚本来实现对数据库的操作了。例子如下:
1)安装cx_Oracle会遇到的问题:在Windows下安装cx_Oracle不要尝试用pip install的方式了!下载官网的对应版本的msi安装文件,我的python2.7是32位的,oracle的instantClient也是32位的,这个cx_Oracle也选择32位的下载,安装成功后进入python模式下import cx_Oracle没问题,安装成功。
2)使用cx_Oracle会遇到的问题:在通过cx_Oracle访问数据库的过程中,如果出现“InterfaceError: Unable to acquire Oracle environment handle”的错误!把oracle客户端的所有文件拷贝到“D:\Python27\Lib\site-packages”即Python的安装路径根目录下(因为不知道具体要拷贝哪些,就全拷贝了),如下图所示:
以下是通过cx_Oracle远程访问oracle数据库的方式(保存在本地文件夹下的execute_sql.py文件中):
# -*- coding: utf-8 -*- import cx_Oracle def interact_db(userInfo,dbStr,sql): connStr = userInfo + dbStr conn = cx_Oracle.connect(connStr) c = conn.cursor() c.execute(sql) if sql.startswith('select'): fir=c.fetchall() conn.commit() c.close() conn.close() return fir else: conn.commit() c.close() conn.close() def exec_sql(userInfo,dbStr,sql): if sql.startswith('select'): results = interact_db(userInfo,dbStr,sql) return results else: interact_db(userInfo,dbStr,sql)
userInfo这个变量里存的是用户信息,格式为'用户名/密码';
dbStr变量里存的是数据库连接字符串,格式为'@HOST:PORT/SERVICE_NAME'。例子如下:
dbStr = '@20.129.340.851:8885/test' userInfo = 'userName/passWord'
用户名密码后面那些信息(数据库连接字符串)可在本地oracle客户端文件夹下的“TNSNAMES.ORA”文件中查看,如下图位置所示:
之后在其他的脚本中就可以调用这个数据库访问脚本来实现对数据库的操作了。例子如下:
# -*- coding: utf-8 -*- from execute_sql import exec_sql dbStr = '@HOST:PORT/SERVICE_NAME' userInfo = 'username/password' #查询 dbSql = 'select xx from xxx where a like \'%aaa%\'' r = exec_sql(userInfo,dbStr,dbSql) tip = u'XXXXXXX:'+r[0][0]
相关文章推荐
- oracle
- Oracle 的EBS 中OAF开发使用pageContext.forwardImmediately遇到OARedirectException异常
- Oracle常用的数据字典
- oracle 存储过程循环执行update语句
- ORACLE11g 讨厌的用户验证问题
- Oracle 将一个用户上的内容复制到另一个用户中
- Oracle 11.2.0.4.5 RAC升级OJVM_11.2.0.4.160419_psu出现的问题
- oracle 查询表的大小,表空间的使用情况,默认表空间
- 不安装oracle客户端,用plsql连接oracle
- Oracle单个数据文件超过32G后扩容
- 查看oracle数据库的大小和空间使用情况
- ORACLE与mysql中查询第n条到第m条的数据记录的方法
- oracle 执行包含update语句的存储过程并获取结果记录
- ORACLE中Like与Instr模糊查询性能大比拼
- Servlet+oracle MVC 架构 搭建简易购物车web项目---数据库设计
- Python连接oracle数据库踩到的坑
- oracle 连接出错 注册 regsvr32 OraOLEDB11
- Oracle Text是如何支持本地文件的检索
- oracle text
- Oracle中执行存储过程call和exec区别