编译python为可执行文件遇到的问题:使用python-oracledb连接oracle数据库时出现错误:DPY-3010
错误原文:
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")
oracledb.init_oracle_client() 来启用厚模式。
因为是企业的正式数据库,我不想造成太大风险,所以我不升级数据库版本:
要获得更新的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为可执行文件遇到的问题:使用python-oracledb连接oracle数据库时出现错误:DPY-3010的更多相关文章
- Python + cx_Orcale 连接Oracle数据库
这是我在使用python连接Oracle数据库时遇到的问题.在此做一下总结. 1.pip install cx_Oracle 2.然后还需要在下载一个数据库客户端工具instantclient-bas ...
- Python 连接 Oracle数据库
1.环境设置 [root@oracle ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@oracle ~]# python - ...
- Python 连接Oracle数据库
连接:python操作oracle数据库 python——连接Oracle数据库 python模块:cx_Oracle, DBUtil 大概步骤: 1. 下载模块 cx_Oracle (注意版本) ...
- 【python】python连接Oracle数据库
python连接Oracle数据库 查看Oracle版本 select * from v$version 下载对应版本的InstantClient 下载网址 InstantClient 1.解压Ins ...
- python——连接Oracle数据库
前言 Python自带的模块中有很多操纵文件的.我们可以把文件的数据读出来,经过处理还可以将数据写入文件中.但是对于数据的管理和分析来说,数据库还是专业一些.如果Python能和数据库结合在一起,那么 ...
- python 连接oracle 数据库
我们在测试中可能需要对oracle 数据库进行操纵,比如这样一个场景,在往oracle 里面插数据的同时,另一个工具从里面读,如何能保证读出来的数据是有顺序的,即:先插入进去的先读出来,根据这个场景们 ...
- Python 使用PyMySql 库 连接MySql数据库时 查询中文遇到的乱码问题(实测可行) python 连接 MySql 中文乱码 pymysql库
最近所写的代码中需要用到python去连接MySql数据库,因为是用PyQt5来构建的GUI,原本打算使用PyQt5中的数据库连接方法,后来虽然能够正确连接上发现还是不能提交修改内容,最后在qq交流群 ...
- python 3.x 安装问题及连接oracle数据库
最近有用到python去处理一些问题,发现现在3已出来,遂用直接下3.7使用 发现问题还是有一点的 1. pip 会出现ssl问题 Could not install packages due to ...
- Python连接oracle数据库 例子一
step1:下载cx_Oracle模块,cmd--pip install cx_Oracle step2: 1 import cx_Oracle #引用模块cx_Oracle 2 conn=cx_Or ...
- python连接oracle数据库报错"DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: "解决方案
操作系统,python3.5, oracle_11, 均为64位:plsql 正常连接. 也顺利安装了cx_oracle 6.3,但是python进行连接的时候就会报错"DatabaseEr ...
随机推荐
- Go应用性能优化的8个最佳实践,快速提升资源利用效率!
作者|Ifedayo Adesiyan 翻译|Seal软件 链接|https://earthly.dev/blog/optimize-golang-for-kubernetes/ 优化服务器负载对于确 ...
- Python开发中自动化构建项目结构样式
摘要:在项目开发过程中,一个良好的项目结构对于团队的协作和代码的可维护性起着重要作用.通过使用自动生成项目结构文字样式的工具.不仅节省了手动编写项目结构的麻烦,还确保了结构的一致性和准确性. 本文分享 ...
- 【笔试实战】LeetCode题单刷题-编程基础 0 到 1【二】
1822. 数组元素积的符号 题目链接 1822. 数组元素积的符号 题目描述 已知函数 signFunc(x) 将会根据 x 的正负返回特定值: 如果 x 是正数,返回 1 . 如果 x 是负数,返 ...
- CF371D Vessels题解
思路: 定义一个权值并查集,权值保存这个集合还可以存下多少水. 如果这个集合可以存放的水已经小于要装入的水,就将这个集合与下一个集合合并. 否则,直接把这个集合可以存放的水减去要装入的水的体积. 代码 ...
- PlayWright(二十一)- Pytest插件报告
1.下载 pytest框架有官方的报告pip install pytest-html 下载成功,那我们怎么使用呢? 2.使用 可以直接在配置文件里使用 在 pytest 配置文件中, 增加 ...
- Libvirtd networks -- 为libvirtd 中虚拟机指定ip遇到的问题
backgroup 为libvirtd 中虚拟机指定ip,操作如下: virsh --connect qemu:///system dumpxml vm01 | grep "mac addr ...
- 解决pandas 读取csv文件报错
使用encoding参数: pd.read_csv(path,sep=",",encoding='utf-16') 注意:该参数之后的编码格式,并不是固定的,需要用记事本打开csv ...
- PoW是什么?
PoW是什么? 工作量证明(proof of work,PoW)是一种用于确认和验证区块链交易和新区块有效性的共识算法.区块链中常见的工作量证明算法包括比特币的SHA-256.以太坊的Ethash.莱 ...
- MyBatis-Plus批量插入方法saveBatch
1. saveBatch能否提高插入的效率? 先说结论,saveBatch()方法也是一条一条的插入,也就是说它会产生多条insert语句,而不是一条insert语句,所以它不是真正的批量插入,更不能 ...
- C# QRCode二维码的解析与生成
已知一张二维码图片,怎么生成一张一模一样的图片出来? 最近有个项目,需要用到QRCode,之前只做过Datamatrix格式的,想着应该也是差不多的,于是就依葫芦画瓢,掏出我的陈年OnBarcode类 ...