鱼C论坛

 找回密码
 立即注册
查看: 2838|回复: 5

[已解决]oracledb如何使用thick模式

[复制链接]
发表于 2023-3-22 09:58:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
python3.11.2++pyqt6+pyside6,由于cx_oracle8.3不更新,故升级应用oracledb 1.2.2
在连接oracle11.2远程服务器时,提示DPY-3010: connections to this database server version are not supported by python-oracledb in thin mode
经查Python-oracledb的thin模式可以连接到 Oracle 数据库 12.1 或更高版本。如果想连接到 Oracle Database 11.2,您需要通过以下方式启用thick模式在您的代码中调用oracledb.init_oracle_client()。
查阅官方文档后还是不能完全吃透
有大神可以教教我oracledb.init_oracle_client()该如何调用成功吗?

---------------DBConnect.py如下------------------------
from oracledb import  Connection
oracledb.init_oracle_client()    #这里thick模式我不知道怎么写了
# 连接oracle数据库
conn = Connection(
    host="130.1.25.99",
    port=1521,
    user="ZYY",
    password="2023@KAV",
    service_name="orcl"
)
cursor = conn.cursor()
cursor.execute("select name,user_name,password from staff_dict")
results = cursor.fetchall()
print(results)
conn.close()
最佳答案
2023-3-22 10:10:29
试试如下代码:
import cx_Oracle
import os

# 设置Oracle客户端路径
os.environ["PATH"] += ";C:\\oracle\\instantclient_11_2"

# 初始化Oracle客户端
cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_11_2")

# 建立数据库连接
dsn = cx_Oracle.makedsn(host='130.1.25.99', port=1521, sid='orcl')
conn = cx_Oracle.connect(user='ZYY', password='2023@KAV', dsn=dsn)

# 执行SQL查询
cursor = conn.cursor()
cursor.execute("SELECT name, user_name, password FROM staff_dict")
results = cursor.fetchall()
print(results)

# 关闭数据库连接
cursor.close()
conn.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-22 10:10:29 | 显示全部楼层    本楼为最佳答案   
试试如下代码:
import cx_Oracle
import os

# 设置Oracle客户端路径
os.environ["PATH"] += ";C:\\oracle\\instantclient_11_2"

# 初始化Oracle客户端
cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_11_2")

# 建立数据库连接
dsn = cx_Oracle.makedsn(host='130.1.25.99', port=1521, sid='orcl')
conn = cx_Oracle.connect(user='ZYY', password='2023@KAV', dsn=dsn)

# 执行SQL查询
cursor = conn.cursor()
cursor.execute("SELECT name, user_name, password FROM staff_dict")
results = cursor.fetchall()
print(results)

# 关闭数据库连接
cursor.close()
conn.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-22 10:26:34 | 显示全部楼层
本帖最后由 hejialiangya 于 2023-3-22 10:39 编辑
ouyunfu 发表于 2023-3-22 10:10
试试如下代码:


感谢大哥回复,不过我cx_oracle装不上。我按你的试了试oracledb的方法
DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found"

我不太理解这两段
# 设置Oracle客户端路径
os.environ["PATH"] += ";C:\\oracle\\instantclient_11_2"
# 初始化Oracle客户端
cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_11_2")
的语法,
路径是固定语法,还是根据自己电脑里的路径调整?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-22 10:42:23 | 显示全部楼层
为了启用thick模式,你需要使用oracledb.init_oracle_client()函数并传递一个包含客户端库路径的参数。这里是你需要做的:

确保你已安装了Oracle客户端库。对于Oracle 11.2,你需要使用Oracle Instant Client 11.2。你可以从这里下载它:https://www.oracle.com/database/ ... ient/downloads.html

解压下载的Instant Client,并记下解压后的文件夹路径。你需要这个路径来初始化init_oracle_client()函数。

接下来,你需要修改DBConnect.py文件,如下所示:
from oracledb import Connection
import os

# 这里替换为实际的Oracle Instant Client 11.2的路径
oracle_instant_client_path = "/path/to/instantclient_11_2"

# 设置环境变量,以便找到Oracle Instant Client
os.environ["PATH"] = oracle_instant_client_path + os.pathsep + os.environ["PATH"]

# 初始化Oracle客户端,启用thick模式
oracledb.init_oracle_client(lib_dir=oracle_instant_client_path)

# 连接oracle数据库
conn = Connection(
    host="130.1.25.99",
    port=1521,
    user="ZYY",
    password="2023@KAV",
    service_name="orcl"
)
cursor = conn.cursor()
cursor.execute("select name,user_name,password from staff_dict")
results = cursor.fetchall()
print(results)
conn.close()

请确保将oracle_instant_client_path变量设置为你在步骤2中记录的路径。现在,你的代码应该可以在thick模式下与Oracle 11.2数据库建立连接。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-22 12:04:22 | 显示全部楼层
本帖最后由 hejialiangya 于 2023-3-23 08:54 编辑
isdkz 发表于 2023-3-22 10:42
为了启用thick模式,你需要使用oracledb.init_oracle_client()函数并传递一个包含客户端库路径的参数。这里 ...

经大神指点,问题已解决。
期间还有点小插曲,被官方文档误导了,文档说instantclient_12_2可以连接Oracle11.2.0.4及以上,但其实会报DPI-1047: Cannot locate a 64-bit Oracle Client library
需要退版本instantclient_11_2包(Basic+sdk+odbc),环境变量配置好path,tnsnames.ora放入C:\instantclient_11_2。thick模式顺利连接成功。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-23 08:56:51 | 显示全部楼层
ouyunfu 发表于 2023-3-22 10:10
试试如下代码:

大哥神了,早知道我直接下instantclient_11_2包,就不用在这小问题上折腾1天了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 01:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表