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


Posted in Python onJanuary 30, 2018

初次使用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年第一期,由于使用的是递归,在性能上不是很好,代码非常吃内存,电脑内存不够的朋友就不要尝试了,容易死机。

以上这篇python链接oracle数据库以及数据库的增删改查实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python模块学习 filecmp 文件比较
Aug 27 Python
python实现获取客户机上指定文件并传输到服务器的方法
Mar 16 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
详解如何使用Python编写vim插件
Nov 28 Python
详解django+django-celery+celery的整合实战
Mar 19 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 Python
Python 等分切分数据及规则命名的实例代码
Aug 16 Python
Python Gluon参数和模块命名操作教程
Dec 18 Python
pytorch的梯度计算以及backward方法详解
Jan 10 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
Oct 31 Python
Python之qq自动发消息的示例代码
Feb 18 Python
python实现简易版计算器
Jun 22 #Python
python列表的增删改查实例代码
Jan 30 #Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 #Python
Python Tkinter实现简易计算器功能
Jan 30 #Python
python使用tkinter实现简单计算器
Jan 30 #Python
Python实现简单遗传算法(SGA)
Jan 29 #Python
Python之reload流程实例代码解析
Jan 29 #Python
You might like
虫族 Zerg 热键控制
2020/03/14 星际争霸
如何在php中正确的使用json
2013/08/06 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
JavaScript 题型问答有答案参考
2010/02/17 Javascript
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
div+css布局的图片连续滚动js实现代码
2010/05/04 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
2018/07/23 jQuery
vue 点击按钮增加一行的方法
2018/09/07 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
简单介绍Ruby中的CGI编程
2015/04/10 Python
python实现图片筛选程序
2018/10/24 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
python实现超市商品销售管理系统
2019/11/22 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
python不同版本的_new_不同点总结
2020/12/09 Python
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
Parts Express:音频、视频和扬声器的第一来源
2017/04/25 全球购物
英语商务邀请函范文
2014/01/16 职场文书
趣味体育活动方案
2014/02/08 职场文书
第二课堂活动总结
2014/05/07 职场文书
施工安全责任书范本
2014/07/24 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
2015年少先队活动总结
2015/03/25 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书