当前位置: 首页 > news >正文

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安装根目录下

http://www.cnnetsun.cn/news/3770905.html

相关文章:

  • AIGC内容治理与区块链结合:技术趋势与工程实践
  • 终极中文POB指南:3分钟掌握PoeCharm流放之路角色构建
  • OpenClaw便携式2026,笔记本与U盘双模式使用
  • AI 辅助代码质量管理的下一步:从审查到自愈式修复的技术可行性与路线
  • Dunning-Kruger效应的思考应用
  • 3步解决《鸣潮》卡顿问题:WaveTools工具箱全面使用指南
  • UE5实时渲染新突破:3D高斯溅射技术从原理到实战
  • 终极KMS激活指南:3分钟免费激活Windows和Office全系列
  • VOC2028 安全帽佩戴检测数据集介绍、下载及YOLO/VOC/COCO训练格式转换
  • RK平台SENSOR框架分析
  • 90%的人自学网安越学越迷茫!5 个新手高频致命误区,帮你省下半年摸索时间
  • 工业通信调试效率提升50%:Wu.CommTool多协议一体化解决方案深度解析
  • Akagi:5分钟搭建你的智能麻将AI教练,从新手到高手的实战指南
  • G-Helper终极指南:三步释放华硕笔记本隐藏性能,告别臃肿控制软件
  • C#关键字
  • APK Installer:在Windows上直接安装Android应用的完整指南
  • 浏览器端MP4处理终极方案:如何用MP4Box.js实现专业级媒体文件解析与流媒体处理
  • 美国护照翻译件怎么办理?足不出户线上翻译盖章!
  • 智测云联ZhiCloud智慧云平台的技术架构与落地实践
  • 四公理结构认知框架概述
  • 多门店健身场馆私教排课智慧系统定制开发服务商
  • REST Assured链式调用设计模式解析:建造者模式与模板方法实战
  • 【能源AI落地避坑手册】:从POC到规模化部署的9个致命盲区,92%项目折戟于此
  • AI批量读取PDF/CSV/Parquet总失败?3步零代码修复法+自检checklist(内含GitHub高星工具链)
  • AI副业定价不是拍脑袋:用蒙特卡洛模拟+客户支付意愿热力图定最终报价
  • 工业级语音识别系统FireRedASR2S核心技术解析
  • Ozlo Sleepbuds 2评测:舒适助眠体验佳,但睡眠追踪准确性待提升!
  • PyRadiomics安装全攻略:从依赖解析到跨平台部署实战
  • 如何用DamaiHelper抢票脚本快速搞定热门演出门票?3分钟完整指南
  • 可直接回测!Ptrade 强势 ETF 周度轮动程序化交易策略全解