错误原文:
DPY-3010: connections to this database server version are not supported by python-oracledb in thin mode链接数据库方式如下:
connection=create_engine("oracle+oracledb://user:password@host:post/dbname")
PyCharm编译器内运行成功但编译后会有DPY-3010无法使用的情况。经排查和阅读python-oracledb使用文档,发现: Python-oracledb 的默认精简模式可以连接到 Oracle 数据库 12.1 或更高版本。如果要连接到 Oracle 数据库 11.2,则需要通过在代码中调用
oracledb.init_oracle_client()
来启用厚模式。
请参阅用户文档 https://python-oracledb.readthedocs.io/en/latest/user_guide/initialization.html#enabling-python-oracledb-thick-mode
我是这样做的:
检查我要连接的oracle数据库版本:
因为是企业的正式数据库,我不想造成太大风险,所以我不升级数据库版本:
要获得更新的Oracle 数据库 XE 版本,请参阅 https://www.oracle.com/au/database/technologies/xe-downloads.html
我在导入oracledb后引入了下面的厚模式,但编译后仍会有DPY-3010的报错
import oracledb oracledb.init_oracle_client(lib_dir=r"C:\Oracle\Instant Client\bin")
C:\Oracle\Instant Client\bin 是oracle安装的主目录,我是从我本机的PL/SQL工具的首选项中查到的。这是连接oracle数据库的即时客户端工具,每台电脑安装的位置都有可能不一样。
我后来经过反复验证和阅读Python-oracledb手册发现create_engine("oracle+oracledb...在用法中已弃用。
所以我采用了连接池的方式实现了功能。完整代码如下:
import oracledb oracledb.init_oracle_client(lib_dir=r"C:\Oracle\Instant Client\bin") # 针对oracle11.2的老版本需要采用这种厚模式 # 使用连接池的方法,目的是可以提高数据库的性能 # 初始化连接 pool = oracledb.create_pool(user="user", password='password', dsn="host:post/dbname", min=2, max=5, increment=1) # Acquire 连接到池 oapool = pool.acquire() # 使用连接池 with oapool.cursor() as cursor: for result in cursor.execute("select * from test"): print(result) # 释放连接池 pool.release(oapool) # 关闭连接池 pool.close()
编译成可执行文件时,我也走了很多弯路。
首先是pyinstaller工具,因为对于一些第三方包以及oracledb依赖环境不能一起打包,导致编译后放在其他电脑上没有依赖环境无法运行,这里我走了很多弯路,pyinstaller是有点坑。
经过摸索我安装并测试使用了cxfreeze工具,目前基本可以满足依赖环境的一起打包。cmd命令如下:
cxfreeze main.py --target-dir dist --base-name="win32gui"
引导主程序:main.py
新建dist文件夹并将最终main所依赖程序打包在该目录下:--target-dir dist
隐藏cmd控制台的参数:--base-name="win32gui"
cxfreeze安装完成后在python安装目录的Scripts下应该有下面三个文件:
cxfreeze我用的是目前最新的版本6.16
cxfreeze 6.16.0-dev2 Copyright (c) 2020-2023 Marcelo Duarte.
安装成功后会在Scripts生成最下面两个文件。
第一个文件是我直接从https://download.lfd.uci.edu/pythonlibs/archived/cx_Freeze-6.11.1-cp310-cp310-win_amd64.whl下好放在Scripts下的。
命令行下运行cxfreeze-h可以看的相关参数和版本号。cxfreeze安装方法我会在下一篇文章里做一下总结。
参考链接:https://www.52dianzi.com/category/article/1dd154d83d77de2073abfc71b32b9aa0.html
标签:python,3010,oracledb,Oracle,cxfreeze,oracle,数据库 From: https://www.cnblogs.com/mylive/p/17517589.html