
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
Excel 数据聚类分析:从操作实践到业务价值挖掘 在数据分析场景中,聚类分析作为 “无监督分组” 的核心工具,能从杂乱数据中挖 ...
2025-09-10统计模型的核心目的:从数据解读到决策支撑的价值导向 统计模型作为数据分析的核心工具,并非简单的 “公式堆砌”,而是围绕特定 ...
2025-09-10CDA 数据分析师:商业数据分析实践的落地者与价值创造者 商业数据分析的价值,最终要在 “实践” 中体现 —— 脱离业务场景的分 ...
2025-09-10机器学习解决实际问题的核心关键:从业务到落地的全流程解析 在人工智能技术落地的浪潮中,机器学习作为核心工具,已广泛应用于 ...
2025-09-09SPSS 编码状态区域中 Unicode 的功能与价值解析 在 SPSS(Statistical Product and Service Solutions,统计产品与服务解决方案 ...
2025-09-09CDA 数据分析师:驾驭商业数据分析流程的核心力量 在商业决策从 “经验驱动” 向 “数据驱动” 转型的过程中,商业数据分析总体 ...
2025-09-09R 语言:数据科学与科研领域的核心工具及优势解析 一、引言 在数据驱动决策的时代,无论是科研人员验证实验假设(如前文中的 T ...
2025-09-08T 检验在假设检验中的应用与实践 一、引言 在科研数据分析、医学实验验证、经济指标对比等领域,常常需要判断 “样本间的差异是 ...
2025-09-08在商业竞争日益激烈的当下,“用数据说话” 已从企业的 “加分项” 变为 “生存必需”。然而,零散的数据分析无法持续为业务赋能 ...
2025-09-08随机森林算法的核心特点:原理、优势与应用解析 在机器学习领域,随机森林(Random Forest)作为集成学习(Ensemble Learning) ...
2025-09-05Excel 区域名定义:从基础到进阶的高效应用指南 在 Excel 数据处理中,频繁引用单元格区域(如A2:A100、B3:D20)不仅容易出错, ...
2025-09-05CDA 数据分析师:以六大分析方法构建数据驱动业务的核心能力 在数据驱动决策成为企业共识的当下,CDA(Certified Data Analyst) ...
2025-09-05SQL 日期截取:从基础方法到业务实战的全维度解析 在数据处理与业务分析中,日期数据是连接 “业务行为” 与 “时间维度” 的核 ...
2025-09-04在卷积神经网络(CNN)的发展历程中,解决 “梯度消失”“特征复用不足”“模型参数冗余” 一直是核心命题。2017 年提出的密集连 ...
2025-09-04CDA 数据分析师:驾驭数据范式,释放数据价值 在数字化转型浪潮席卷全球的当下,数据已成为企业核心生产要素。而 CDA(Certified ...
2025-09-04K-Means 聚类:无监督学习中数据分群的核心算法 在数据分析领域,当我们面对海量无标签数据(如用户行为记录、商品属性数据、图 ...
2025-09-03特征值、特征向量与主成分:数据降维背后的线性代数逻辑 在机器学习、数据分析与信号处理领域,“降维” 是破解高维数据复杂性的 ...
2025-09-03CDA 数据分析师与数据分析:解锁数据价值的关键 在数字经济高速发展的今天,数据已成为企业核心资产与社会发展的重要驱动力。无 ...
2025-09-03解析 loss.backward ():深度学习中梯度汇总与同步的自动触发核心 在深度学习模型训练流程中,loss.backward()是连接 “前向计算 ...
2025-09-02要解答 “画 K-S 图时横轴是等距还是等频” 的问题,需先明确 K-S 图的核心用途(检验样本分布与理论分布的一致性),再结合横轴 ...
2025-09-02