python牛刀小試導(dǎo)入excel數(shù)據(jù)到Oracle

實(shí)踐了一把python操作excel,以及cx_Oracle操作oracle捶枢,并讀取excel表格數(shù)據(jù)到oracle握截。

開發(fā)環(huán)境

windows10 python3.5

excel操作練習(xí)

# encoding: utf-8

import xlrd

# 設(shè)置GBK編碼
xlrd.Book.encoding = "gbk"

excelPath = r"C:\Users\think\Desktop\盤錦項(xiàng)目\盤錦三期\視頻集成相關(guān)\視頻導(dǎo)入模板.xls"

#打開Excel文件讀取數(shù)據(jù)
data = xlrd.open_workbook(excelPath)
#獲取一個(gè)工作表
#table = data.sheets()[0]          
#通過索引順序獲取 
#table = data.sheet_by_index(0) #通過索引順序獲取
table = data.sheet_by_name(u'Sheet1')#通過名稱獲取
#獲取整行和整列的值(數(shù)組)   
print(table.row_values(1))
print(table.col_values(1))
#獲取行數(shù)和列數(shù)
nrows = table.nrows
ncols = table.ncols
#循環(huán)行列表數(shù)據(jù)
for i in range(1,nrows ):
    print(table.row_values(i))
 
#單元格
cell_A1 = table.cell(0,0).value
cell_C4 = table.cell(1,2).value 
#使用行列索引
cell_A1 = table.row(0)[0].value 
cell_A2 = table.col(1)[0].value
#簡單的寫入
row = 0 
col = 0 
# 類型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
ctype = 1 
value = "單元格的值"
xf = 0 # 擴(kuò)展的格式化 
table.put_cell(row, col, ctype, value, xf) 
table.cell(0,0)  #單元格的值' 
table.cell(0,0).value #單元格的值'

oracle操作練習(xí)

import cx_Oracle

#參數(shù):用戶名/密碼@監(jiān)聽(server主機(jī):server端口/server名稱)
#conn = cx_Oracle.connect("test/root@10.80.17.5:1521/userTest")
#參數(shù)為:用戶名、密碼烂叔、監(jiān)聽(server主機(jī):server端口/server名稱)
#conn = cx_Oracle.connect("test", "root", "10.80.17.5:1521/userTest")
#參數(shù)為:用戶名皆看、密碼进每、TSN
conn = cx_Oracle.connect("tyum_um", "DEV_TYUM_UM", "PJDB_215")
#創(chuàng)建cursor
cursor = conn.cursor()
sql = "select * from t_um_ob"
#執(zhí)行sql語句
cursor.execute(sql)
#獲取所有的記錄
one = cursor.fetchall()
#一條一條的訪問記錄
for x in one:
    print(x)   
#關(guān)閉cursor
cursor.close()
#關(guān)閉連接
conn.close()

讀取excel導(dǎo)入到oracle

需求:讀取excel數(shù)據(jù)并更新回oracle,excel表格數(shù)據(jù)見下圖:

excel數(shù)據(jù)

參考代碼如下,做了簡單的錯(cuò)誤處理:

# encoding: utf-8

import xlrd
import cx_Oracle
import re


####配置項(xiàng)######
# 設(shè)置excel GBK編碼
xlrd.Book.encoding = "gbk"
#Oracle連接配置:用戶名织阅、密碼拧略、TSN
conn = cx_Oracle.connect("ty_zhzf", "DEV_TY_ZHZF", "PJDB_215")
cursor = conn.cursor()  
#excel路徑
excelPath = r"C:\Users\think\Desktop\盤錦項(xiàng)目\盤錦三期\視頻集成相關(guān)\宜居鄉(xiāng)村視頻點(diǎn)位2.0.xlsx"

class Camera(object):
    pass

def getFloatValue(value , default=0.0):    
    if( value == None or len(str(value))==0):
        return default
    else:
        return float(value)

def run():
    #打開Excel文件讀取數(shù)據(jù)
    data = xlrd.open_workbook(excelPath)
    table = data.sheets()[0] 
    #獲取行數(shù)和列數(shù)
    nrows = table.nrows   
    ncols = table.ncols


    sql = """update t_sp_video set c_x=:c_x,c_y=:c_y where c_camera_name =:c_camera_name"""


    colName=""
    cameraFullName=""
    cameraName=""
    lon=0.0
    lat=0.0
    cellRowNum=-1
    lstCameraName=[]
    camera=None
    lstCamera =[]
    lstFails =[]

    #遍歷excel表
    if(nrows>0):
        #循環(huán)行列表數(shù)據(jù)雕擂,從第1行開始踊东;
        for i in range(0,nrows ):
            
            try:
                colName = table.row_values(i)[0]
                if(colName =="點(diǎn)位名稱") :
                    cameraFullName = table.row_values(i)[1]
                    regex = re.search('(?<=[村| 會(huì)])[\s|\S]*?(?=[\(|\(])',str(cameraFullName))
                    
                    if(regex == None):
                        #cameraName = cameraFullName[-11:-7]
                        cameraName =""                       
                        print("第 {0} 行解析攝像頭名稱失敗胞四!原文:{1}".format(i+1,str(cameraFullName)))
                        cameraFullName=""
                        continue
                    else :
                        cameraName = regex.group()
                        lstCameraName.append(cameraName)
                        cellRowNum = i+1
                        continue
                if(colName =="緯度") :
                    lat = getFloatValue(table.row_values(i)[1])
                    continue
                if(colName =="經(jīng)度") :
                    lon = getFloatValue(table.row_values(i)[1])
                    
                if(lat>0 and lon >0 and len(cameraName)>0) :                    
                    camera = Camera()
                    camera.cameraName = cameraName
                    camera.lat=lat
                    camera.lon=lon
                    camera.fullName=cameraFullName
                    camera.cellRowNum=cellRowNum
                    lstCamera.append(camera)                   
            except Exception as ex:
                print("第 {0} 行解析攝像頭名稱失斕裰!辜伟,失敗原因:{1}".format(i+1,str(ex)))
            lon=-0.0
            lat=-0.0
        
        
        # #查找重復(fù)的
        # duplicates    =   set([x  for x   in  lstCamera   if  lstCameraName.count(x.cameraName)>1]) #count()=>total number of occurrences of x in s
        # for item in duplicates :
        #     print(item)
        for item in lstCamera :
            if(lstCameraName.count(item.cameraName)>1):
                lstCamera.remove(item)
                print("ERROR! 第 {0} 行攝像頭名稱有重復(fù)氓侧!原文:{1}".format(item.cellRowNum,item.fullName))
                lstFails.append(item.cellRowNum)
            else :                
                cursor.execute(sql,{
                    'c_x' :  item.lon,
                    'c_y': item.lat,
                    'c_camera_name' : item.cameraName                                  
                    })
                rowCount = cursor.rowcount
                if(rowCount==1):
                    # print("第 {0} 行導(dǎo)入成功!原文:{1} 受影響行數(shù) {2}".format(item.cellRowNum,item.fullName,rowCount))
                    pass
                elif (rowCount >1) :
                    print("ERROR导狡! 第 {0} 行導(dǎo)入有重復(fù)约巷!原文:{1} 受影響行數(shù) {2}".format(item.cellRowNum,item.fullName,rowCount))
                    lstFails.append(item.cellRowNum)
                elif (rowCount <=0) :
                    print("第 {0} 行導(dǎo)入失敗旱捧!原文:{1}".format(item.cellRowNum,item.fullName))
                    lstFails.append(item.cellRowNum)
                    
        conn.commit()
        cursor.close()
        conn.close()  
        print(lstFails)   
        print(len(lstFails))   
        
run()

總體感覺比寫強(qiáng)類型開發(fā)語言要爽一些独郎,和寫JS一樣踩麦,爽得一B。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氓癌,一起剝皮案震驚了整個(gè)濱河市谓谦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贪婉,老刑警劉巖反粥,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異疲迂,居然都是意外死亡才顿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門尤蒿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來郑气,“玉大人,你說我怎么就攤上這事腰池】⑻埃” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵巩螃,是天一觀的道長。 經(jīng)常有香客問我匕争,道長避乏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任甘桑,我火速辦了婚禮拍皮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘跑杭。我一直安慰自己铆帽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布德谅。 她就那樣靜靜地躺著爹橱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪窄做。 梳的紋絲不亂的頭發(fā)上愧驱,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音椭盏,去河邊找鬼组砚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛掏颊,可吹牛的內(nèi)容都是我干的糟红。 我是一名探鬼主播艾帐,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盆偿!你這毒婦竟也來了柒爸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤陈肛,失蹤者是張志新(化名)和其女友劉穎揍鸟,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體句旱,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阳藻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谈撒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腥泥。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖啃匿,靈堂內(nèi)的尸體忽然破棺而出蛔外,到底是詐尸還是另有隱情,我是刑警寧澤溯乒,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布夹厌,位于F島的核電站,受9級(jí)特大地震影響裆悄,放射性物質(zhì)發(fā)生泄漏矛纹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一光稼、第九天 我趴在偏房一處隱蔽的房頂上張望或南。 院中可真熱鬧,春花似錦艾君、人聲如沸采够。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蹬癌。三九已至,卻和暖如春虹茶,著一層夾襖步出監(jiān)牢的瞬間冀瓦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國打工写烤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翼闽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓洲炊,卻偏偏與公主長得像感局,于是被迫代替她去往敵國和親尼啡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容