python連結oracle資料庫以及資料庫的增刪改查例項
初次使用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" % (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,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,COL3)VALUES(12341,'ashdfh','shhsdfh','sghs')") cursor.execute ("INSERT INTO INSERTTEST (ID,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')"%(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資料庫以及資料庫的增刪改查例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。