欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python連接oracle數(shù)據(jù)庫(kù)操作實(shí)例及遇到的異常

 更新時(shí)間:2023年12月26日 09:52:43   作者:dsdasun  
這篇文章主要給大家介紹了關(guān)于python連接oracle數(shù)據(jù)庫(kù)操作實(shí)例及遇到的一些異常,Oracle是著名且廣泛使用的數(shù)據(jù)庫(kù)之一,而python的數(shù)據(jù)處理功能可以很好地利用這種連接性,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在進(jìn)行數(shù)據(jù)庫(kù)連接之前,一般都需要導(dǎo)入依賴的庫(kù),通過專門的庫(kù)去處理對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接,所以沒安裝對(duì)應(yīng)的處理庫(kù)的話,需要先進(jìn)行安裝、再導(dǎo)入,導(dǎo)入后即可正常使用。

一、安裝cx_Oracle

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ì)。

在剛才下載好的oracle客戶端版本中找到下面三個(gè)文件:oci.dll、oraocci11.dll、oraociei11.dll,將這幾個(gè)dll文件復(fù)制到
Python\Python36-32\Lib\site-packages文件夾中。

二、導(dǎo)入庫(kù)

代碼如下(示例):

import cx_Oracle

三、數(shù)據(jù)庫(kù)操作實(shí)例

3.1 連接

import cx_Oracle
conn = cx_Oracle.connect('xzt/xzt@localhost/testdb')#這里的順序是用戶名/密碼@oracleserver的ip地址/數(shù)據(jù)庫(kù)名字
cursor = conn.cursor()
print('連接數(shù)據(jù)庫(kù)成功!')
sql = "select * from student"
all = cursor.execute(sql)
print(all.fetchall())

3.2數(shù)據(jù)庫(kù)查詢

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 () 

3.3數(shù)據(jù)庫(kù)插入

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()

3.4 實(shí)例從某網(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)碼入庫(kù)
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ù)入庫(kù)的
	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)

四、異常

4.1、運(yùn)行時(shí),出現(xiàn)連接數(shù)據(jù)庫(kù)失敗:DatabaseError:DPI-1047

解決連接失敗問題

1、查看Oracle的版本號(hào)

#linux下查詢
sqlplus / as sysdba
select * from v$version;

2、進(jìn)入官網(wǎng),下載對(duì)應(yī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,進(jìn)入選擇匹配python版本的包

這里我的python版本是3.6 64位

cmd進(jìn)入下載cx_Oracle-8.1.0-cp36-cp36m-win_amd64.whl的目錄,以下是我本地目錄,應(yīng)修改成你自己的下載目錄安裝最新下載的包

pip install cx_Oracle-8.1.0-cp36-cp36m-win_amd64.whl

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

拷貝到目錄如下

4.在使用python連接時(shí),需要注意以下點(diǎn):

1、需要下載已安裝的oracle數(shù)據(jù)庫(kù)對(duì)應(yīng)的版本

2、需要下載與python版本對(duì)應(yīng)的cx_Oracle包

3、需要把oracle版本的ddl文件放置python安裝根目錄下

總結(jié)

到此這篇關(guān)于python連接oracle數(shù)據(jù)庫(kù)操作實(shí)例及遇到的異常的文章就介紹到這了,更多相關(guān)python連接oracle數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python異常類型以及處理方法匯總

    Python異常類型以及處理方法匯總

    調(diào)試Python程序時(shí),經(jīng)常會(huì)報(bào)出一些異常,下面這篇文章主要給大家介紹了關(guān)于Python異常類型以及處理方法的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • python 的numpy庫(kù)中的mean()函數(shù)用法介紹

    python 的numpy庫(kù)中的mean()函數(shù)用法介紹

    這篇文章主要介紹了python 的numpy庫(kù)中的mean()函數(shù)用法介紹,具有很好對(duì)參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python兩種注釋用法的示例

    python兩種注釋用法的示例

    這篇文章主要介紹了python兩種注釋用法的示例,幫助大家開始學(xué)習(xí)和使用python 注釋,感興趣的朋友可以了解下
    2020-10-10
  • Python使用Pygame繪制時(shí)鐘

    Python使用Pygame繪制時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了Python使用Pygame繪制時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Python?十個(gè)字典用法使用技巧歸納

    Python?十個(gè)字典用法使用技巧歸納

    今天小編幫大家簡(jiǎn)單介紹下Python的一種數(shù)據(jù)結(jié)構(gòu):?字典,字典是一種可變?nèi)萜髂P?,且可存?chǔ)任意類型對(duì)象,它用于存放具有映射關(guān)系的數(shù)據(jù),這里介紹歸納十個(gè)字典的用法技巧,需要的朋友可以參考下
    2022-01-01
  • 淺談python腳本設(shè)置運(yùn)行參數(shù)的方法

    淺談python腳本設(shè)置運(yùn)行參數(shù)的方法

    今天小編就為大家分享一篇淺談python腳本設(shè)置運(yùn)行參數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 詳解Django框架中用戶的登錄和退出的實(shí)現(xiàn)

    詳解Django框架中用戶的登錄和退出的實(shí)現(xiàn)

    這篇文章主要介紹了詳解Django框架中用戶的登錄和退出的實(shí)現(xiàn),Django是重多Python人氣框架中最為知名的一個(gè),需要的朋友可以參考下
    2015-07-07
  • 用python實(shí)現(xiàn)前向分詞最大匹配算法的示例代碼

    用python實(shí)現(xiàn)前向分詞最大匹配算法的示例代碼

    這篇文章主要介紹了用python實(shí)現(xiàn)前向分詞最大匹配算法的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 在Python的Flask框架中構(gòu)建Web表單的教程

    在Python的Flask框架中構(gòu)建Web表單的教程

    Flask框架中自帶一個(gè)Form表單類,通過它的子類來實(shí)現(xiàn)表單將相當(dāng)愜意,這里就為大家?guī)鞵ython的Flask框架中構(gòu)建Web表單的教程,需要的朋友可以參考下
    2016-06-06
  • Python異步編程之yield?from的用法詳解

    Python異步編程之yield?from的用法詳解

    yield?from?是Python3.3?后新加的語(yǔ)言結(jié)構(gòu),可用于簡(jiǎn)化yield表達(dá)式的使用,這篇文章主要為大家詳細(xì)介紹了yield?from的用法,需要的可以了解一下
    2023-12-12

最新評(píng)論