news 2026/7/31 17:46:34

python--连接oracle数据库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python--连接oracle数据库

python--连接oracle数据库

  • 前言
  • 一、安装cx_Oracle
  • 二、导入库
  • 三、数据库操作实例
    • 3.1 连接
    • 3.2数据库查询
    • 3.3数据库插入
    • 3.4 实例从某网站上面爬取彩票号码
  • 四、异常
    • 4.1、运行时,出现连接数据库失败:DatabaseError:DPI-1047
      • 解决连接失败问题
        • 1、查看Oracle的版本号
        • 2、进入官网,下载对应Oracle版本
        • 3.下载cx_Oracle包:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook
        • 4.在使用python连接时,需要注意以下点:

前言

在进行数据库连接之前,一般都需要导入依赖的库,通过专门的库去处理对应的数据库连接,所以没安装对应的处理库的话,需要先进行安装、再导入,导入后即可正常使用。

一、安装cx_Oracle

cx_Oracle:python链接oracle的驱动包,这个需要自己安装,https://pypi.python.org/pypi/cx_Oracle/5.3在这个网址中下载对应的驱动,下载驱动的时候一定要选好对应的版本,我的python是3.6的32位版本,所以在下载驱动的时候也要选择对应的版本,我选择的版本是cx_Oracle-5.3-11g.win32-py3.6.exe (md5),下载后直接安装运行就行了,他会有一个自检,如果没有通过就说明你的驱动版本没有下载对。

在刚才下载好的oracle客户端版本中找到下面三个文件:oci.dll、oraocci11.dll、oraociei11.dll,将这几个dll文件复制到
Python\Python36-32\Lib\site-packages文件夹中。

二、导入库

代码如下(示例):

importcx_Oracle

三、数据库操作实例

3.1 连接

importcx_Oracle conn=cx_Oracle.connect('xzt/xzt@localhost/testdb')#这里的顺序是用户名/密码@oracleserver的ip地址/数据库名字cursor=conn.cursor()print('连接数据库成功!')sql="select * from student"all=cursor.execute(sql)print(all.fetchall())

3.2数据库查询

importcx_Oracle conn=cx_Oracle.connect('xzt/xzt@localhost/testdb')cursor=conn.cursor()cursor.execute("SELECT * FROM STUDENT_TB")rows=cursor.fetchall()#得到所有数据集forrowinrows:print("%d, %s, %s, %s"%(row[0],row[1],row[2],row[3]))#python3以上版本中print()要加括号用了print("Number of rows returned: %d"%cursor.rowcount)cursor.execute("SELECT * FROM STUDENT_TB")while(True):row=cursor.fetchone()#逐行得到数据集ifrow==None:breakprint("%d, %s, %s, %s"%(row[0],row[1],row[2],row[3]))print("Number of rows returned: %d"%cursor.rowcount)cursor.close()conn.close()

3.3数据库插入

importcx_Oracle conn=cx_Oracle.connect('xzp/xzp@localhost/testdb')cursor=conn.cursor()cursor.execute("CREATE TABLE INSERTTEST(ID INT, C1 VARCHAR(50), C2 VARCHAR(50), C3 VARCHAR(50))")cursor.execute("INSERT INTO INSERTTEST (ID, COL1, COL2, COL3)VALUES(1213412, 'asdfa', 'ewewe', 'sfjgsfg')")cursor.execute("INSERT INTO INSERTTEST (ID, COL1, COL2, COL3)VALUES(12341, 'ashdfh', 'shhsdfh', 'sghs')")cursor.execute("INSERT INTO INSERTTEST (ID, COL1, COL2, COL3)VALUES(123451235, 'werwerw', 'asdfaf', 'awew')")conn.commit()#这里一定要commit才行,要不然数据是不会插入的cursor.close()conn.close()

3.4 实例从某网站上面爬取彩票号码

importreimporturllibimportcx_Oracleimporturllib.requestdefgetHtml(url):page=urllib.request.urlopen(url)html=page.read()returnhtmldefgetNumber(html):reg=r'<li class="ball_red">(\d{2})</li>'reg2=r'<li class="ball_blue">(\d{2})</li>'regqnumber=r'第 <font class="cfont2"><strong>(\d*)</strong></font>'number=re.compile(reg)numberblue=re.compile(reg2)qnumber=re.compile(regqnumber)numberlist=re.findall(number,html.decode('gbk'))numberblue=re.findall(numberblue,html.decode('gbk'))qnum=re.findall(qnumber,html.decode('gbk'))fornumberinnumberblue:numberlist.append(number)forninqnum:numberlist.append(n)print(numberlist)returnnumberlist#将查询到的号码入库defRecodeToOracle(list):conn=cx_Oracle.connect('xzp/xzp@localhost/testdb.domain')cur=conn.cursor()sql="INSERT INTO SSQ (REDNUM1,REDNUM2,REDNUM3,REDNUM4,REDNUM5,REDNUM6,BLUENUM,QNUMBER) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s')"%(list[0],list[1],list[2],list[3],list[4],list[5],list[6],list[7])cur.execute(sql)cur.close()conn.commit()#这里一定要提交,要不然是没有办法将数据入库的conn.close()#记得要关闭会话defGeturl(html):reg=r'上一期:<a href="(.*)" target="_blank">'url=re.compile(reg)urllist=re.findall(url,html.decode('gbk'))iflen(urllist)!=0:print(urllist[0])ifurllist[0].index('http:')<0:urllist[0]='http:'+urllist[0]htmlbefore=getHtml(urllist[0])# print(htmlbefore)numberlist=getNumber(htmlbefore)print(len(numberlist))RecodeToOracle(numberlist)print(numberlist)Geturl(htmlbefore)else:returnstr1='网站地址'html1=getHtml(str1)RecodeToOracle(getNumber(html1))Geturl(html1)

四、异常

4.1、运行时,出现连接数据库失败:DatabaseError:DPI-1047

解决连接失败问题

1、查看Oracle的版本号
#linux下查询 sqlplus / as sysdba select * from v$version;

2、进入官网,下载对应Oracle版本

https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

将下载的包解压,添加到环境变量

3.下载cx_Oracle包:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook

ctrl+f 搜索:cx_Oracle,进入选择匹配python版本的包
这里我的python版本是3.6 64位



cmd进入下载cx_Oracle-8.1.0-cp36-cp36m-win_amd64.whl的目录,以下是我本地目录,应修改成你自己的下载目录安装最新下载的包

pip install cx_Oracle-8.1.0-cp36-cp36m-win_amd64.whl


打开oracle版本的解压包,进入解压后的目录,C:\work\instantclient-basic-windows.x64-12.2.0.1.0\instantclient_12_2(换成你本地的目录,这里是我本地的),把所有的.dll文件全部拷贝到python的根目录

拷贝到目录如下

4.在使用python连接时,需要注意以下点:

1、需要下载已安装的oracle数据库对应的版本
2、需要下载与python版本对应的cx_Oracle包
3、需要把oracle版本的ddl文件放置python安装根目录下

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 17:46:15

AIGC内容治理与区块链结合:技术趋势与工程实践

AIGC内容治理与区块链结合&#xff1a;技术趋势与工程实践 一、AIGC爆发式增长背后的内容治理危机 2023-2024年&#xff0c;AIGC&#xff08;AI生成内容&#xff09;技术经历爆发式增长。大模型驱动的文字、图片、音频、视频生成工具&#xff08;如GPT-4、Midjourney、Sora&a…

作者头像 李华
网站建设 2026/7/31 17:45:35

终极中文POB指南:3分钟掌握PoeCharm流放之路角色构建

终极中文POB指南&#xff1a;3分钟掌握PoeCharm流放之路角色构建 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm 还在为《流放之路》复杂的英文角色构建工具而头疼吗&#xff1f;PoeCharm中文版为你…

作者头像 李华
网站建设 2026/7/31 17:42:57

OpenClaw便携式2026,笔记本与U盘双模式使用

笔记本模式&#xff1a;随身携带的完整系统以前出差或者去客户现场&#xff0c;最怕的就是电脑出问题——要么系统卡顿&#xff0c;要么软件不兼容&#xff0c;有时候甚至得背着沉重的笔记本满城跑。后来接触到OpenClaw便携式2026&#xff0c;才发现原来“便携”可以做到这种程…

作者头像 李华
网站建设 2026/7/31 17:40:27

Dunning-Kruger效应的思考应用

【摘要】本文首先介绍了Dunning-Kruger效应&#xff0c;接着引入“有担当的管理者把下属从愚昧山峰推向绝望之谷”的观点&#xff0c;分析思考后&#xff0c;结合Johari Window给出了个人发展的建议&#xff0c;然后主要针对组织成员能力和自我评价不匹配的情形提出组织行为的具…

作者头像 李华
网站建设 2026/7/31 17:40:10

3步解决《鸣潮》卡顿问题:WaveTools工具箱全面使用指南

3步解决《鸣潮》卡顿问题&#xff1a;WaveTools工具箱全面使用指南 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 还在为《鸣潮》游戏卡顿和60FPS限制而烦恼吗&#xff1f;WaveTools鸣潮工具箱是专为《鸣…

作者头像 李华