python连接Oracle数据库

如果直接pip install cx_Oracle,那么在python代码中去import是没有问题的,但是在连接数据库的时候会报错。(我的环境是Windows系统)
大概如下报错: cx_Oracle.DatabaseError: DPI-1047

1、在dbeaver中查看自己的Oracle的版本号
select * from v$version;
image

2、下载对应版本的的Oracle客户端
(1)地址如下:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

(2)根据上述Oracle版本查找下载对应的客户端版本:
image

(3)下载下来后,解压到自己想要的位置
如:D:\指定路径\instantclient_11_2
这里你可以配置环境变量,也可以不用配置,个人建议顺手就配置一下

3、下载cx_Oracle
(1)下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook
image
备注:点击上面的下载地址,然后进入下载页面,ctrl+f进行搜索,cx_Oracle,找到适合自己的版本的包
(我这边的python版本是3.10的,而且是64位的,因此我下载的就是:cx_Oracle‑8.3.0‑cp310‑cp310‑win_amd64.whl)

(2)进入到cx_Oracle‑8.3.0‑cp310‑cp310‑win_amd64.whl的下载目录,进入当前目录的cmd命令窗口
image
执行如下命令进行安装:pip install cx_Oracle‑8.3.0‑cp310‑cp310‑win_amd64.whl
image

备注:
---如果安装成功,那么说明你之前没有安装过,而且你的python的环境变量配置成功了的。
---如果安装失败,那可能你的python环境变量没有配置。
---如果安装重复,那么说明你之前用pip install cx_Oralce。(可以用pip uninstall 命令先把之前的卸载了)
pip uninstall cx_Oracle 卸载命令

4、将之前下载对应版本的的Oracle客户端的安装目录打开(instantclient-basic-windows.x64-11.2.0.4.0.zip解压后):
image

5、这样就可以连接你的oracle了。
import cx_Oracle
conn = cx_Oracle.connect('账号','密码','数据IP:端口/数据库实例名称')
cusor = conn.cursor()
print('连接数据库成功!')
print(cx_Oracle.version)
image

代码实现:

点击查看代码
"""
==========
Author:lucilla
Time:2023/3/14 22:12
Project:MGJ_Project
==========
"""
import cx_Oracle

from Common.handle_config import config


class HandleDb:
    """
    数据库各种操作
    """

    def __init__(self):
        # '用户名','密码','监听地址/数据库名'
        # 与数据库连接,生成数据库对象
        self.oracle_connection = cx_Oracle.connect(
            config.get("oracle", "username"),
            config.get("oracle", "password"),
            config.get("oracle", "host/port/database")
        )
        # 创建游标,生成游标对象
        self.oracle_cursor = self.oracle_connection.cursor()

    def select_one_data(self, sql):
        """
        获取一条数据
        :param sql:
        :return:
        """
        self.oracle_connection.commit()
        self.oracle_cursor.execute(sql)
        return self.oracle_cursor.fetchone()

    def select_all_data(self, sql):
        """
        获取所有数据
        :param sql:
        :return:
        """
        self.oracle_connection.commit()
        self.oracle_cursor.execute(sql)
        return self.oracle_cursor.fetchall()

    def update(self, sql):
        """
        对数据库进行增、删、改的操作
        :param sql:
        """
        self.oracle_cursor.execute(sql)
        self.oracle_connection.commit()

    def close(self):
        """
        关闭游标,关闭数据库连接
        """
        self.oracle_cursor.close()
        self.oracle_connection.close()


if __name__ == '__main__':
    db = HandleDb()
    # sql1 = "SELECT CCARDTYPENAME FROM SHOPMEMBERCARD WHERE MEMBERID = '102215599'"
    sql1 = "SELECT cardfee FROM shopmembercard WHERE memberid = '102216077' and id = '30620808'"
    # res = db.get_count(sql1)
    res = db.select_one_data(sql1)[0]
    print(res)
    # pass

原文链接:https://blog.csdn.net/qq_38135191/article/details/123775892

posted @ 2023-03-15 11:46  lucilla  阅读(1169)  评论(0编辑  收藏  举报