Python使用cx_Oracle连接Oracle数据库

这玩意儿真没有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)

你可能感兴趣的:(Python使用cx_Oracle连接Oracle数据库)