京公网安备 11010802034615号
经营许可证编号:京B2-20210330
python链接oracle数据库以及数据库的增删改查实例
初次使用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="(.*)" rel="external nofollow" 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年第一期,由于使用的是递归,在性能上不是很好,代码非常吃内存,电脑内存不够的朋友就不要尝试了,容易死机。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在企业数字化运营、业务流程管理与精细化管控体系中,流程运营是串联各项业务环节、保障工作落地、提升运转效率的核心载体。无论 ...
2026-09-16在数据分析与统计学研究中,卡方检验是分析分类变量关联性与差异性的重要方法,广泛应用于市场调研、行为统计、社会调查、商业数 ...
2026-09-16 很多数据分析师每天盯着GMV、DAU、转化率,但当被问到“什么是指标”“指标和维度有什么区别”“如何定义指标值的计算规则和 ...
2026-09-16CDA数据分析师 出品 作者:李诗怡 定义: 用户增长核心分析框架,刻画用户从接触产品到自发推荐的全生命周期,五个递进环节构建 ...
2026-09-15在数字化营销与精细化用户运营时代,企业传统的广撒网式营销模式成本高、转化率低,已无法适配精准商业竞争需求。客户画像作为大 ...
2026-09-15 很多数据分析师精通描述性统计,能熟练计算均值、中位数、标准差,但当被问到“用500个样本如何推断10万用户的真实满意度” ...
2026-09-15在MySQL数据库数据查询与数据分析中,GROUP BY与ORDER BY是使用频率极高的核心关键字。二者语法结构相似,常搭配使用,但核心功 ...
2026-09-14随着数字化治理、智慧运营、数字孪生技术的普及,数字体征成为衡量业务状态、系统运行、城市治理与企业经营健康度的核心体系。数 ...
2026-09-14 很多数据分析师沉迷于复杂的模型和算法,却忽略了数据分析的一项基础能力——描述性统计。事实上,大量商业分析问题,用描述 ...
2026-09-14在MySQL数据库运维与开发实践中,经常出现一种典型现象:数据库实际存储的数据量很小,数据表条数少、文件体积低,但服务器整体 ...
2026-09-11 很多数据分析师能熟练计算均值、标准差,但当被问到“总体和样本有什么区别”“参数和统计量有什么关系”“数据级别的高低如 ...
2026-09-11CDA数据分析师 出品 作者:李诗怡 定义: 将同一时间段内因具备相同属性或共同经历的用户划分为群体,分析其留存与生命周期价值 ...
2026-09-11在零售、商超、餐饮、线下门店等实体商业运营中,客流与销售额是衡量门店经营状态的两大核心指标。销售额是门店经营的最终结果, ...
2026-09-10在数据可视化体系中,柱形图是最基础、应用最广泛的图表类型,其中**累计柱形图(堆积柱状图)**是兼顾整体总量与内部结构的核心 ...
2026-09-10 许多数据分析师精通Excel函数和SQL查询,但当面对一张上万行的销售明细表,要快速回答“哪个地区销量最高”“哪款产品增长最 ...
2026-09-10在Python Pandas数据分析中,DataFrame是承载结构化数据的核心载体,数据清洗、数据修正、条件赋值、字段更新等实操场景,都离不 ...
2026-09-09 很多数据分析师掌握了Excel函数、会写SQL查询,但当被问到“数据从哪里来”“数据加工有哪些步骤”“如何使用分析工具连接数 ...
2026-09-09卡方检验(Chi-Square Test)是统计学中针对分类数据的经典显著性检验方法,核心用于判断两个离散分类变量是否相互独立、数据实 ...
2026-09-09CDA数据分析师 出品 作者:李诗怡 1. 销售漏斗阶段判断 题目:销售漏斗模型中,通过广告、社交媒体等方式触达品牌信息(如浏览品 ...
2026-09-07在Python数据分析中,Pandas库的DataFrame是最核心、最常用的结构化数据表对象,类似于Excel的二维表格,具备规整的行列结构、字 ...
2026-09-07