python3.6连接oracle数据库

一、环境信息

win 10
python 3.6

二、python安装包

cx_Oracle-8.0.0-cp36-cp36m-win_amd64.whl

三、示例代码

import cx_Oracle as oracle
import sys
from common.readconfig import Config

config = Config()

class OracleDb:
    def __init__(self, connect):
        try:
            self.conn = oracle.connect(connect)
            self.cursor = self.conn.cursor()
        except oracle.Error as e:
            sys.exit(1)

    # 针对读操作返回结果集,以字典格式返回
    def execute_query(self, sql):
        try:
            self.cursor.execute(sql)
            result = self.cursor.fetchall()
            res = []
            cols = [d[0] for d in self.cursor.description]
            for row in result:
                b = dict(zip(cols, row))
                res.append(b)
            return res
        except oracle.Error as e:
            sys.exit(1)

    # 针对更新,删除,事务等操作失败时回滚
    def execute_commit(self, sql=''):
        try:
            self.cursor.execute(sql)
            self.conn.commit()
        except oracle.Error as e:
            self.conn.rollback()
            sys.exit(1)

    def _close(self):
        try:
            self.cursor.close()
            self.conn.close()
        except AttributeError as e:
            pass

    def __del__(self):
        self._close()


if __name__ == '__main__':
    oracle = OracleDb('username/password@host:port/db')
    res = oracle.execute_query("select rowid, a, b from test t where t.name='zhangsan'")
    print(res[0].get('a'))

四、连接过程中报错处理

1、 cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library

原因:目前plsql的破解版只支持32位的instantclient,32位的instantclient连接64位的Oracle没有问题,但64位的Python却用不了,所以需要下载64位的instantclient。

下载oracle客户端
http://jvniu.jb51.net:81/201708/tools/instantclientx64_jb51.rar
并解压,将目录下所有dll文件拷贝到python安装目录,重启pycharm即可
在这里插入图片描述
在这里插入图片描述

2、AttributeError: ‘OracleDb’ object has no attribute ‘Error’

网上查找资料发现,是由于sql后面带了;号导致的,去掉分号后成功执行

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值