您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關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數據庫以及實現數據庫增刪改查操作”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。