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安装oracle扩展及数据库连接方法
Feb 21 Python
Python PyQt5标准对话框用法示例
Aug 23 Python
Python中getpass模块无回显输入源码解析
Jan 11 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 Python
Pytorch Tensor的索引与切片例子
Aug 18 Python
从numpy数组中取出满足条件的元素示例
Nov 26 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 Python
Python实现转换图片背景颜色代码
Apr 30 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
Django日志及中间件模块应用案例
Sep 10 Python
python中温度单位转换的实例方法
Dec 27 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
ajax 的post方法实例(带循环)
2011/07/04 PHP
php使用异或实现的加密解密实例
2013/09/04 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
js选择器全面解析
2016/06/27 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
跟老齐学Python之复习if语句
2014/10/02 Python
Python打印斐波拉契数列实例
2015/07/07 Python
Python中的一些陷阱与技巧小结
2015/07/10 Python
通过数据库向Django模型添加字段的示例
2015/07/21 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
一看就懂得Python的math模块
2018/10/21 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
霸王洗发水广告词
2014/03/14 职场文书
销售人员求职的自我评价分享
2014/03/15 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
教师个人自我评价
2015/03/04 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
python实现批量移动文件
2021/04/05 Python
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS