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判断字符串是否纯数字的方法
Nov 19 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
利用python发送和接收邮件
Sep 27 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
Python实现二维曲线拟合的方法
Dec 29 Python
python实现五子棋人机对战游戏
Mar 25 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
Aug 12 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
pycharm 中mark directory as exclude的用法详解
Feb 14 Python
Python3将ipa包中的文件按大小排序
Apr 17 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
python中Django文件上传方法详解
Aug 05 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
PHP 远程关机实现代码
2009/11/10 PHP
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
DOM 高级编程
2015/05/06 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
ES6 系列之 Generator 的自动执行的方法示例
2018/10/19 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
python无序链表删除重复项的方法
2020/01/17 Python
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
new修饰符是起什么作用
2015/06/28 面试题
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
微电影大赛策划方案
2014/06/05 职场文书
锦旗标语大全
2014/06/23 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
地球上的星星观后感
2015/06/02 职场文书
NodeJs内存占用过高的排查实战记录
2021/05/10 NodeJs
Python打包exe时各种异常处理方案总结
2021/05/18 Python
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL