python链接oracle数据库以及数据库的增删改查

2023-11-16

初次使用python链接oracle,所以想记录下我遇到的问题,便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节。

1.首先,python链接oracle数据库需要配置好环境。我的相关环境如下:

1)python:Python 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 17:26:49) [MSC v.1900 32 bit (Intel)] on win32

2)oracle:11.2.0.1.0 64bit。这个是server版本号,在链接oracle数据库的时候还需要oracle的客户端版,客户端版本的下载也要参考python的版本,python是32位的客户端下载也要用32位。

3)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),下载后直接安装运行就行了,他会有一个自检,如果没有通过就说明你的驱动版本没有下载对。

2.上面的工作做好之后,在刚才下载好的oracle客户端版本中找到下面三个文件:oci.dll、oraocci11.dll、oraociei11.dll,将这几个dll文件复制到

Python\Python36-32\Lib\site-packages文件夹中。

3.在python中输入:

import cx_Oracle

没有报错的话说明驱动安装成功。

 

4.数据库连接操作:

conn = cx_Oracle.connect('xzt/xzt@localhost/testdb')#这里的顺序是用户名/密码@oracleserver的ip地址/数据库名字
	cur = conn.cursor()
	sql = "SELECT * FROM DUAL"
	cur.execute(sql)
	cur.close()
	conn.commit()
	conn.close()

5.数据库查询:

import cx_Oracle  
  
conn = cx_Oracle.connect('xzt/xzt@localhost/testdb')    
cursor = conn.cursor ()  
  
cursor.execute ("SELECT * FROM STUDENT_TB")  
rows = cursor.fetchall() #得到所有数据集 
for row in rows:  
    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() #逐行得到数据集
    if row == None:  
        break  
    print("%d, %s, %s, %s" % (row[0], row[1], row[2], row[3])) 
      
print("Number of rows returned: %d" % cursor.rowcount)
  
cursor.close ()  
conn.close () 

6.数据库插入:

import cx_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()

7案例:从某网站上面爬取彩票号码

import re
import urllib
import cx_Oracle
import urllib.request

def getHtml(url):
	page = urllib.request.urlopen(url)
	html= page.read()
	return html
def getNumber(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'))
	for number in numberblue:
		numberlist.append(number)
	for n in qnum:
		numberlist.append(n)
	print(numberlist)
	return numberlist

	#将查询到的号码入库
def RecodeToOracle(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()#记得要关闭会话
def Geturl(html):
	reg = r'上一期:<a href="(.*)" target="_blank">'
	url = re.compile(reg)
	urllist = re.findall(url,html.decode('gbk'))
	if len(urllist)!=0:
		print(urllist[0])
		if urllist[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:	
		return

str1 = '网站地址'
html1 = getHtml(str1)
RecodeToOracle(getNumber(html1))
Geturl(html1)

上面的代码用了递归运算,循环读取彩票信息,可以一直读取到2003年第一期,由于使用的是递归,在性能上不是很好,代码非常吃内存,电脑内存不够的朋友就不要尝试了,容易死机。

感兴趣的朋友可以关注下面的公众号,每天分享一点知识,成长看得见,感谢支持!!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python链接oracle数据库以及数据库的增删改查 的相关文章

  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • 预防H7N9

    传染源 目前尚不明确 根据以往经验及本次病例流行病学调查 推测可能为携带H7N9禽流感病毒 的禽类及其分泌物或排泄物 1 症状 病情表现为典型的病毒性肺炎 起病急 病程早期有高热 38度以上可给予物理降温 如冰敷 乙醇擦浴 降温毯等 儿童禁
  • 电路基础和电路模拟——复习

    目录 前言 一 第一章电路基础 1 参考方向 关联参考方向的物理意义 参考方向 关联参考方向 2 电压与电位的区别 3 在非关联参考方向下 欧姆定律 功率计算的表达式 4 电容中电流与电压关系式 5 电容储能公式和物理意义 电容储能公式 物
  • 数据挖掘案例实战:利用LDA主题模型提取京东评论数据(二)

    泰迪智能科技 数据挖掘平台 TipDM数据挖掘平台 最新推出的数据挖掘实战专栏 专栏将数据挖掘理论与项目案例实践相结合 可以让大家获得真实的数据挖掘学习与实践环境 更快 更好的学习数据挖掘知识与积累职业经验 专栏中每四篇文章为一个完整的数据
  • 基于Python的考研调配系统考试成绩招生调剂-爬虫可视化大屏计算机毕业设计

    更多项目资源 最下方联系我们 目录 一 项目技术介绍 二 项目配套文档 部分内容 资料获取 一 项目技术介绍 该项目含有源码 文档 PPT 配套开发软件 软件安装教程 项目发布教程 包运行成功以及课程答疑与微信售后交流群 送查重系统不限次数
  • 多层多输入的CNN-LSTM时间序列回归预测(卷积神经网络-长短期记忆网络)——附代码

    目录 摘要 卷积神经网络 CNN 的介绍 长短期记忆网络 LSTM 的介绍 CNN LSTM Matlab代码运行结果 本文Matlab代码 数据分享 摘要 本文使用CNN LSTM混合神经网络对时间序列数据进行回归预测 本模型的输入数据个
  • pandas set_index和reset_index

    mport pandas as pd df a pd DataFrame data A B C A1 B1 C1 columns first second third print df a df a set index first seco
  • [项目管理-28]:四象限法与任务的时间优先级管理

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 前言 第1章 四象限法介绍 1 1 概述 1 2 四象限优先级顺序 1 3 详细说明 前言 在项目管理中 我们经常遇到对各种各样的任务
  • 让Layui的table模块支持动态表头

    layui自带的table js插件是不支持的 这里我们简单的加几个字符进去 就可以支持了 1 打开插件目录下的layui lay modules目录 用文本文件打开table js 然后搜索 item2 title 在table js将
  • idea中如何创建xml文件

    本人做java开发程序员已经三年多了 从进入企业至今一直使用idea 对此开发工具还算了解 本人使用的版本 我是一个比较守旧的人 在2020年的今天还是依然使用2017年的版本 还请光大网友见谅哈 今天想说的就是如何在idea中创建 xml
  • docker高级篇(mysql主从,redis主从搭建,Dockerfile解析及docker-compose编排)

    本篇主要是mysql主从 redis主从搭建 Dockerfile解析及docker compose编排 轻量化可视化工具Portainer 重量级工具CAdvisor InfluxDB Granfana的使用 docker的安装 配置 卸
  • 如何把swf的动画嵌入到ppt中_flash(.swf)嵌入ppt中

    利用ppt的控件工具箱中的shockwave flash object控件 添加一个swf文件到ppt 然后右击这个swf文件编辑其属性时 把EmbedMovie一项的值改为True 就表示将其嵌入ppt 你就可以删除swf源文件了 使用
  • ThinkPad E40 XP 安装SATA/AHCI驱动

    ThinkPad E40 XP 安装SATA AHCI驱动 2010 11 06 16 42 我的机子是ThinkPad E40 0578A59 安装XP之后准备打开SATA硬盘的AHCI模式并安装其驱动 但是总是安装失败 只要在BIOS里
  • 吃透这份“Java进阶核心手册”再战字节,直接把面试官按在地上摩擦

    前言 本人计算机本科 已经有两年Java开发经验 由于原来公司已经不能满足我的需求 辞去原来的工作准备跳槽大厂 在辞职之前也认为有做过一段时间的准备 2021年8月初 我满怀信心去字节跳动面试Java研发岗位 结果当场被字节面试官吊打 莫不
  • echarts后台获取数据,前台实现饼图显示并自定义图形的数据表展示格式

    1 实现效果图 切换前效果 切换后效果 2 关键的js代码 var myChart echarts init document getElementById aaa 为echarts对象加载数据 var opts post getUnitA
  • JavaScript DOM(二)查

    书接上回 节点 DOM中有许多不同类型的节点 接下来我们先看看其中的三种 元素节点 文本节点和属性节点 元素节点 指该html里面标签的名字就是元素的名字 例如 我们使用的 p p ul 和 div 之类的元素 p标签的名字是 p 无序列表
  • 安装Node(脚手架)

    目录 一 安装node 脚手架 1 1 配置vue config js 1 2 vue cli3x的目录介绍 1 3 package json 最后 一 安装node 脚手架 从官网直接下载安装即可 自带npm包管理工具 https nod
  • [1132]Flink与Kafka版本对应关系

    以下为Flink和Kafka的版本对照表 Flink版本 Kafka版本 1 12 X 2 4 1 1 11 X 2 4 1 1 10 X 2 2 1 1 9 X 2 2 0 1 8 X 2 0 1 1 7 X 2 0 1 0 10 x 0
  • 怎么把服务器安装系统还原,云服务器磁盘怎么安装系统还原

    云服务器磁盘怎么安装系统还原 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 如果Windows操作系统弹性云服务器未安装
  • 程序源码分享-STM32的PID实验(含DAC和ADC)

    一 PID 算法原理 在工业应用中 PID 及其衍生算法是应用最广泛的算法之一 是当之无愧的万能算法 如果能够熟练掌握 PID 算法的设计与实现过程 对于一般的研发人员来讲 应该是足够应对一般研发问题了 在我所接触的控制算法当中 PID 控
  • python链接oracle数据库以及数据库的增删改查

    初次使用python链接oracle 所以想记录下我遇到的问题 便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节 1 首先 python链接oracle数据库需要配置好环境 我的相关环境如下 1 python Python 3 6