python連接oracle數(shù)據(jù)庫操作實例及遇到的異常
前言
在進行數(shù)據(jù)庫連接之前,一般都需要導入依賴的庫,通過專門的庫去處理對應的數(shù)據(jù)庫連接,所以沒安裝對應的處理庫的話,需要先進行安裝、再導入,導入后即可正常使用。
一、安裝cx_Oracle
cx_Oracle:python鏈接oracle的驅動包,這個需要自己安裝,https://pypi.python.org/pypi/cx_Oracle/5.3在這個網(wǎng)址中下載對應的驅動,下載驅動的時候一定要選好對應的版本,我的python是3.6的32位版本,所以在下載驅動的時候也要選擇對應的版本,我選擇的版本是cx_Oracle-5.3-11g.win32-py3.6.exe (md5),下載后直接安裝運行就行了,他會有一個自檢,如果沒有通過就說明你的驅動版本沒有下載對。
在剛才下載好的oracle客戶端版本中找到下面三個文件:oci.dll、oraocci11.dll、oraociei11.dll,將這幾個dll文件復制到
Python\Python36-32\Lib\site-packages文件夾中。
二、導入庫
代碼如下(示例):
import cx_Oracle
三、數(shù)據(jù)庫操作實例
3.1 連接
import cx_Oracle
conn = cx_Oracle.connect('xzt/xzt@localhost/testdb')#這里的順序是用戶名/密碼@oracleserver的ip地址/數(shù)據(jù)庫名字
cursor = conn.cursor()
print('連接數(shù)據(jù)庫成功!')
sql = "select * from student"
all = cursor.execute(sql)
print(all.fetchall())
3.2數(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()要加括號用了
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 ()
3.3數(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ù)是不會插入的
cursor.close()
conn.close()
3.4 實例從某網(wǎng)站上面爬取彩票號碼
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()#這里一定要提交,要不然是沒有辦法將數(shù)據(jù)入庫的
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 = '網(wǎng)站地址'
html1 = getHtml(str1)
RecodeToOracle(getNumber(html1))
Geturl(html1)
四、異常
4.1、運行時,出現(xiàn)連接數(shù)據(jù)庫失敗:DatabaseError:DPI-1047

解決連接失敗問題
1、查看Oracle的版本號
#linux下查詢 sqlplus / as sysdba select * from v$version;

2、進入官網(wǎng),下載對應Oracle版本
https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

將下載的包解壓,添加到環(huán)境變量
3.下載cx_Oracle包:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook
ctrl+f 搜索:cx_Oracle,進入選擇匹配python版本的包
這里我的python版本是3.6 64位



cmd進入下載cx_Oracle-8.1.0-cp36-cp36m-win_amd64.whl的目錄,以下是我本地目錄,應修改成你自己的下載目錄安裝最新下載的包
pip install cx_Oracle-8.1.0-cp36-cp36m-win_amd64.whl

打開oracle版本的解壓包,進入解壓后的目錄,C:\work\instantclient-basic-windows.x64-12.2.0.1.0\instantclient_12_2(換成你本地的目錄,這里是我本地的),把所有的.dll文件全部拷貝到python的根目錄

拷貝到目錄如下

4.在使用python連接時,需要注意以下點:
1、需要下載已安裝的oracle數(shù)據(jù)庫對應的版本
2、需要下載與python版本對應的cx_Oracle包
3、需要把oracle版本的ddl文件放置python安裝根目錄下
總結
到此這篇關于python連接oracle數(shù)據(jù)庫操作實例及遇到的異常的文章就介紹到這了,更多相關python連接oracle數(shù)據(jù)庫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python 的numpy庫中的mean()函數(shù)用法介紹
這篇文章主要介紹了python 的numpy庫中的mean()函數(shù)用法介紹,具有很好對參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
用python實現(xiàn)前向分詞最大匹配算法的示例代碼
這篇文章主要介紹了用python實現(xiàn)前向分詞最大匹配算法的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08

