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读写Redis数据库操作示例
Mar 18 Python
Python字符串处理实现单词反转
Jun 14 Python
微信小程序python用户认证的实现
Jul 29 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
浅谈ROC曲线的最佳阈值如何选取
Feb 28 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
May 03 Python
解决python 执行sql语句时所传参数含有单引号的问题
Jun 06 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
Sep 29 Python
python 实现一个图形界面的汇率计算器
Nov 09 Python
Python类型转换的魔术方法详解
Dec 23 Python
安装python依赖包psycopg2来调用postgresql的操作
Jan 01 Python
linux中nohup和后台运行进程查看及终止
Jun 24 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中的字符串函数
2006/11/24 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
php识别翻转iphone拍摄的颠倒图片
2018/05/17 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
破解Session cookie的方法
2006/07/28 Javascript
javascript天然的迭代器
2010/10/29 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
2013/01/21 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
Python中django学习心得
2017/12/06 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
django实现类似触发器的功能
2019/11/15 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
Python分类测试代码实例汇总
2020/07/23 Python
Python读取ini配置文件传参的简单示例
2021/01/05 Python
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
事业单位绩效考核实施方案
2014/03/27 职场文书
家长会标语
2014/06/24 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
出租车拒载检讨书
2015/01/28 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python