欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python使用cx_Oracle连接Oracle数据库

程序员文章站 2024-03-24 21:00:22
...

这玩意儿真没有mysql连接方便...

安装cx_Oracle

如果pip安装完不好用,就重启你的IDE或者直接打开官网下载安装,如果你使用的是pycharm就打开设置在图形化界面中搜索安装

pip install -i https://pypi.douban.com/simple cx_oracle

下载oci.dll

没有这个,无法连接oracle... 如果你用Navicat连接oracle也报错的话也可以下载这个解压出里面的目录放到Navicat程序根目录并在设置中配置好

oracle官网的下载页面

代码

其中oci_dir 为你下载的文件解压出来的目录,目录里面应该有oci.dll文件
init 函数中的判断系统类型Linux下没测试,不好用就自己修改下

cx_oracle官网
cx_oracle官方手册

ORACLE_OCI_DIR为下列形式

ORACLE_OCI_DIR = 'E:\Projects\GitProject\Other\instantclient_12_2'

2018年6月22日更新下列代码中的错误

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Date: 2018-06-22 09:41:08


import cx_Oracle
import platform
import os
import settings


class ConnectOracleDatabase(object):

    def __init__(self):
        self.user = settings.DB_USER
        self.password = settings.DB_PASSWORD
        self.ip = settings.DB_IP
        self.port = settings.DB_PORT
        self.service_name = settings.DB_SERVICE
        self.oci_path = settings.ORACLE_OCI_DIR

        sys_version = platform.architecture()
        if sys_version[1] is not 'WindowsPE':
            os.environ['LD_LIBRARY_PATH '] = self.oci_path
        else:
            os.environ['PATH'] = os.environ['PATH'] + ';' + self.oci_path

        # 解决中文乱码问题
        os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

        self.db_conn = None
        self.db_cursor = None

        self.create_connect()

    def create_connect(self):
        try:
            self.db_conn = cx_Oracle.connect(self.user, self.password,
                                             '%s:%s/%s' % (self.ip,
                                                           self.port,
                                                           self.service_name))
            self.db_cursor = self.db_conn.cursor()
        except Exception as error:
            print("Error creating database connection: %s" % str(error))

    def exec_sql_command(self, sql_command):
        query_result = self.db_cursor.execute(sql_command)
        return query_result  # 这里直接return查询对象,如果不需要就改到__init__中

    def __del__(self):
        try:
            self.db_cursor.close()
            self.db_conn.close()
        except AttributeError as error:
            print(str(error))


oracle_obj = ConnectOracleDatabase()

sql = "select * from CJ_USER"
res = oracle_obj.exec_sql_command(sql)
for i in res.description:
    print(i)

转载于:https://www.jianshu.com/p/8f652835bb13