
一、數據準備
1、excel數據準備(包含字符串、整數、小數、科學(xué)計數法、空值)
CREATE TABLE AM_DC.FXM_TEST
(CLO1 VARCHAR2(12), CLO2 NUMBER(8,0), CLO3 NUMBER(36,2), CLO4 NUMBER(36,4),CLO5 VARCHAR2(12));commit;1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8

二、代碼
注意:必要時(shí)需要先刪除數據庫中數據再導數入庫。
#!/usr/bin/env python# -*- coding: utf-8 -*-import cx_Oracleimport csvimport xlrdimport osimport reclass ImportOracle(object):
def inoracle(self):
pass
def ConnOracle(self):
conn = cx_Oracle.connect('用戶(hù)名', '密碼', 'ip:端口/服務(wù)名')
cursor = conn.cursor()
# 給字符數據加上引號
fields = ['\'' i '\'' for i in self.title]
# 從第一列數據開(kāi)始
fields_str = ', '.join(fields[0:])
#print(fields_str)
for i in self.data:
print(i)
# 插入引號,確保格式正確
a=[ '\'' str(b) '\'' for b in i]
value = ','.join(a[0:])
# 去掉數據中的[NULL]
sql = 'insert into %s values(%s)' % (self.table_name, re.sub('\[Null\] ', '', value))
# 打印生成的SQL
print(sql '\n\n\n')
# 執行SQL語(yǔ)句并提交
cursor.execute(sql)
conn.commit()
# 全部提交后關(guān)閉連接,釋放游標
cursor.close()
conn.close()class ImportOracleCsv(ImportOracle):
def inoracle(self):
contents=[]
with open(self.filename, 'r') as f:
reader = csv.reader(f)
# 將科學(xué)計數現實(shí)的數字顯示
for i in reader:
contents.append(i)
# 獲取第一行為列名
title = contents[0]
# 獲取數據,去掉第一行
data = contents[1:]
return (title, data)class ImportOracleExcel(ImportOracle):
def inoracle(self):
wb = xlrd.open_workbook(self.filename)
#使用第一個(gè)sheet表
sheet1 = wb.sheet_by_index(0)
title = sheet1.row_values(0)
#獲取第一行作為表頭
data = [sheet1.row_values(row) for row in range(1, sheet1.nrows)]
print(data)
return (title, data)#導入非excel文檔報錯'Undefine file type'class ImportError(ImportOracle):
def inoracle(self):
print('Undefine file type')
return 0class ChooseFactory(object):
choose = {}
choose['csv'] = ImportOracleCsv()
choose['xlsx'] = ImportOracleExcel()
choose['xls'] = ImportOracleExcel()
def choosefile(self, ch):
if ch in self.choose:
op = self.choose[ch]
else:
op = ImportError()
return opif __name__ == '__main__':
os.chdir(r'C:\\')#改變當前工作目錄到指定的路徑
file_name = 'fxm_test.xlsx'
table_name = 'fxm_test'
#獲取文件夾類(lèi)型
op = file_name.split('.')[-1]
factory = ChooseFactory()
cal = factory.choosefile(op)
cal.filename = file_name (cal.title, cal.data) = cal.inoracle()
cal.table_name = table_name
cal.ConnOracle()123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 三、結果

打開(kāi)CSDN,閱讀體驗更佳

聯(lián)系客服