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 SQLite3数据库操作类分享
Jun 10 Python
python实现马耳可夫链算法实例分析
May 20 Python
python数据类型_字符串常用操作(详解)
May 30 Python
python决策树之CART分类回归树详解
Dec 20 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
django2.0扩展用户字段示例
Feb 13 Python
用Python实现BP神经网络(附代码)
Jul 10 Python
python使用梯度下降算法实现一个多线性回归
Mar 24 Python
Python requests模块cookie实例解析
Apr 14 Python
python利用 keyboard 库记录键盘事件
Oct 16 Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 Python
python游戏开发Pygame框架
Apr 22 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下正则来匹配dede模板标签的代码
2010/08/21 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
web.py中调用文件夹内模板的方法
2014/08/26 Python
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
集体婚礼证婚词
2014/01/13 职场文书
简历上的自我评价
2014/02/03 职场文书
党员承诺书范文
2014/05/19 职场文书
节能环保标语
2014/06/12 职场文书
500字小学生检讨书
2015/02/19 职场文书
新人入职感言
2015/07/31 职场文书
php中pcntl_fork详解
2021/04/01 PHP
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python