python鏈接oracle數(shù)據(jù)庫以及數(shù)據(jù)庫的增刪改查實(shí)例
初次使用python鏈接oracle,所以想記錄下我遇到的問題,便于向我這樣初次嘗試的朋友能夠快速的配置好環(huán)境進(jìn)入開發(fā)環(huán)節(jié)。
1.首先,python鏈接oracle數(shù)據(jù)庫需要配置好環(huán)境。
我的相關(guān)環(huán)境如下:
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。這個(gè)是server版本號(hào),在鏈接oracle數(shù)據(jù)庫的時(shí)候還需要oracle的客戶端版,客戶端版本的下載也要參考python的版本,python是32位的客戶端下載也要用32位。
3)cx_Oracle:python鏈接oracle的驅(qū)動(dòng)包,這個(gè)需要自己安裝,https://pypi.python.org/pypi/cx_Oracle/5.3在這個(gè)網(wǎng)址中下載對(duì)應(yīng)的驅(qū)動(dòng),下載驅(qū)動(dòng)的時(shí)候一定要選好對(duì)應(yīng)的版本,我的python是3.6的32位版本,所以在下載驅(qū)動(dòng)的時(shí)候也要選擇對(duì)應(yīng)的版本,我選擇的版本是cx_Oracle-5.3-11g.win32-py3.6.exe (md5),下載后直接安裝運(yùn)行就行了,他會(huì)有一個(gè)自檢,如果沒有通過就說明你的驅(qū)動(dòng)版本沒有下載對(duì)。
2.上面的工作做好之后,在剛才下載好的oracle客戶端版本中找到下面三個(gè)文件:oci.dll、oraocci11.dll、oraociei11.dll,將這幾個(gè)dll文件復(fù)制到
Python\Python36-32\Lib\site-packages文件夾中。
3.在python中輸入:
import cx_Oracle
沒有報(bào)錯(cuò)的話說明驅(qū)動(dòng)安裝成功。
4.數(shù)據(jù)庫連接操作:
conn = cx_Oracle.connect('xzt/xzt@localhost/testdb')#這里的順序是用戶名/密碼@oracleserver的ip地址/數(shù)據(jù)庫名字 cur = conn.cursor() sql = "SELECT * FROM DUAL" cur.execute(sql) cur.close() conn.commit() conn.close()
5.數(shù)據(jù)庫查詢:
import cx_Oracle conn = cx_Oracle.connect('xzt/xzt@localhost/testdb') cursor = conn.cursor () cursor.execute ("SELECT * FROM STUDENT_TB") rows = cursor.fetchall() #得到所有數(shù)據(jù)集 for row in rows: print("%d, %s, %s, %s" % (row[0], row[1], row[2], row[3]))#python3以上版本中print()要加括號(hào)用了 print("Number of rows returned: %d" % cursor.rowcount) cursor.execute ("SELECT * FROM STUDENT_TB") while (True): row = cursor.fetchone() #逐行得到數(shù)據(jù)集 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.數(shù)據(jù)庫插入:
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才行,要不然數(shù)據(jù)是不會(huì)插入的 cursor.close() conn.close()
7案例:從某網(wǎng)站上面爬取彩票號(hào)碼
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 #將查詢到的號(hào)碼入庫 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()#這里一定要提交,要不然是沒有辦法將數(shù)據(jù)入庫的 conn.close()#記得要關(guān)閉會(huì)話 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 = '網(wǎng)站地址' html1 = getHtml(str1) RecodeToOracle(getNumber(html1)) Geturl(html1)
上面的代碼用了遞歸運(yùn)算,循環(huán)讀取彩票信息,可以一直讀取到2003年第一期,由于使用的是遞歸,在性能上不是很好,代碼非常吃內(nèi)存,電腦內(nèi)存不夠的朋友就不要嘗試了,容易死機(jī)。
以上這篇python鏈接oracle數(shù)據(jù)庫以及數(shù)據(jù)庫的增刪改查實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
教你如何把Python CSV 合并到多個(gè)sheet工作表
今天我們要實(shí)現(xiàn)將多個(gè)CSV文件,合并到一個(gè)Excel文件中的,多個(gè)sheet工作表,網(wǎng)上大多方法都是將csv直接合并在一起,也不分別創(chuàng)建sheet表。接下來通過本文給大家詳細(xì)介紹下,需要的朋友參考下吧2021-11-11關(guān)于Numpy數(shù)據(jù)類型對(duì)象(dtype)使用詳解
今天小編就為大家分享一篇關(guān)于Numpy數(shù)據(jù)類型對(duì)象(dtype)使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11關(guān)于Pandas缺失值inf與nan的處理實(shí)踐
這篇文章主要介紹了關(guān)于Pandas缺失值inf與nan的處理實(shí)踐,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06使用PIL(Python-Imaging)反轉(zhuǎn)圖像的顏色方法
今天小編就為大家分享一篇使用PIL(Python-Imaging)反轉(zhuǎn)圖像的顏色方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01