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实现将汉字转换成汉语拼音的库
May 05 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
名片管理系统python版
Jan 11 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
Feb 15 Python
Python itertools.product方法代码实例
Mar 27 Python
django rest framework serializer返回时间自动格式化方法
Mar 31 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
May 16 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
Dec 01 Python
Python爬虫实战之爬取携程评论
Jun 02 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
MySQL数据源表结构图示
2008/06/05 PHP
php四种基础算法代码实例
2013/10/29 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
JavaScript入门教程 Cookies
2009/01/31 Javascript
JavaScript 常用函数
2009/12/30 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
es6学习笔记之Async函数的使用示例
2017/05/11 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
2019/04/19 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
vant时间控件使用方法详解
2020/12/24 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
毕业生自荐书
2014/02/02 职场文书
yy婚礼司仪主持词
2014/03/14 职场文书
公司募捐倡议书
2014/05/14 职场文书
会计求职信范文
2014/05/24 职场文书
2014年个人售房协议书
2014/10/30 职场文书
2015年房地产个人工作总结
2015/05/26 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技