近况

搞个python连接数据库都走了好多坑啊,干程序员这条路就是有数不尽的心累,,,,没办法,谁让我菜呢~
不想干了,累了,回家啃老吧,上班真是一点意思没有,不如种田

正文

1. 完全不知道python咋连接数据库,所以问了一下chatgpt,得到下面的代码:

import cx_Oracle
def test():
    # 设置数据库连接信息
    username = '数据库名'
    password = '数据库密码'
    dsn = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle数据库ip)(PORT=端口号一般是1521))(CONNECT_DATA=(SID=oracle的sid值)))'

    # 尝试连接数据库
    try:
        connection = cx_Oracle.connect(username, password, dsn)

        # 如果连接成功,创建游标
        cursor = connection.cursor()

        # 执行SQL查询
        cursor.execute('SELECT * FROM 数据库表')

        # 获取查询结果
        for row in cursor:
            print(row)

        # 关闭游标和连接
        cursor.close()
        connection.close()

    except cx_Oracle.Error as error:
        print(f"Error: {error}")

代码解释:

username的值为什么是数据库名呢?
	oracle数据库是这样的,直接填你想要连的数据库名即可

数据库的sid值是什么?
	不知道,通过询问chatgpt,可以通过sql语句查询出来:SELECT instance_name, status FROM v$instance;

2. 通过上述代码,所以我们得安装cx_Oracle模块,直接pip install cx_Oracle 即可
但是我这情况又比较特殊了,我得离线安装cx_Oracle,所以我找到下载地址:https://pypi.org/project/cx-Oracle/#history
选择一个版本进去后,左下角有个Programming Language一栏,这里是关于该cx_oracle模块适合什么版本的python
右边是cx_Oracle各个版本的下载链接,注意,其中的cp39,cp38是指适合相应版本的python,例如:cp38==python3.8
再根据32位,还是amd64位选择相应的版本进行下载,下载完毕后,直接pip install cx_Oracle-8.3.0-cp38-cp38-win32.whl即可
如果版本下载的不对,则在install时会提示版本不适合该平台的报错
如果仅仅像上篇文章说的拷贝cx_Oracle安装包目录到内网环境的site-packages目录中,则pycharm中也会提示cx_Oracle模块找不到的错误

3. 然后pycharm上应该没有再报错了,但是等我运行的时候又报错了,报错如下:
Error: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found".
通过搜索后才知道,python要连接oracle数据库,不仅需要安装cx_Oracle模块,还需要Oracle客户端
我还以为Oracle客户端就是像navicat一样操作数据库的管理工具呢,其实并不是,估计是python代码操作oracle客户端执行相应的sql语句
然后就去下载oracle客户端去了,地址:https://www.oracle.com/database/technologies/instant-client/downloads.html
根据你自己的电脑版本点进去后,寻找自己要下载哪个版本的oracle客户端,这个是和你oracle数据库版本是匹配的
所以通过执行sql语句,可以查看到自己oracle的版本:SELECT * FROM v$version;
找到匹配的版本,下载第一个链接文件即可,例如:instantclient-basic-windows.x64-11.2.0.4.0.zip
下载,解压后,拷贝该目录下的dll后缀的文件,直接拷贝到python的根目录中即可
这个解决办法是在stackoverflow中找到的,原文地址:点击跳转

最后直接运行代码,应该是没有问题的,如果报错:Error: ORA-12547: TNS:lost contact
那单纯是网络原因导致访问不了远程服务器,反正不是自己的配置和代码原因,那就需要再另寻他法了,求仙嘛,是这样的~

4. 最后贴上一些文章或下载链接吧