csv、excel導入oracle


hcsv導入oracle
    
    
    
            
  1. #coding:gbk
  2. import csv
  3. import cx_Oracle
  4. fields = []
  5. data = []
  6. table_name = 'ygl_test3'
  7. file_name = '清單.csv'
  8. with open(file_name, 'rb') as f:
  9. reader = csv.reader(f)
  10. contents = [i for i in reader]
  11. title = contents[0]
  12. data = contents[1:]
  13. conn = cx_Oracle.connect('user/passwd@cd')
  14. cursor = conn.cursor()
  15. #生成create table語句中字段名字符串
  16. for i in title:
  17. fields.append(i+' varchar2(200)')
  18. fields_str = ', '.join(fields)
  19. sql = 'create table %s (%s)' % (table_name, fields_str)
  20. print sql
  21. #根據excel列名創建數據表的字段
  22. cursor.execute(sql)
  23. #生成executemany語句中的:1,:2字段參數格式
  24. a = [':%s' %i for i in range(len(title)+1)]
  25. value= ','.join(a[1:])
  26. sql = 'insert into %s values(%s)' %(table_name, value)
  27. print sql
  28. #把所有字段插入數據值
  29. cursor.prepare(sql)
  30. cursor.executemany(None, data)
  31. cursor.close()
  32. conn.commit()
  33. conn.close()



升級版:
    
    
    
            
  1. #coding:gbk
  2. import cx_Oracle
  3. import csv
  4. import xlrd
  5. class ImportOracle(object):
  6. #工廠模式初始化導入函數inoracle,用作讀取文件數據
  7. def inoracle(self):
  8. pass
  9. #oracle 連接和寫入函數
  10. def ConnOracle(self):
  11. conn = cx_Oracle.connect('user/passwd@cd')
  12. cursor = conn.cursor()
  13. #以數字開頭的字段加個字符a
  14. self.title = [i if i[0].isdigit() == False else 'a'+i for i in self.title ]
  15. fields = [i+' varchar2(200)' for i in self.title]
  16. fields_str = ', '.join(fields)
  17. sql = 'create table %s (%s)' % (self.table_name, fields_str)
  18. print sql
  19. cursor.execute(sql)
  20. a = [':%s' %i for i in range(len(self.title)+1)]
  21. value= ','.join(a[1:])
  22. sql = 'insert into %s values(%s)' %(self.table_name, value)
  23. print sql
  24. cursor.prepare(sql)
  25. cursor.executemany(None, self.data)
  26. cursor.close()
  27. conn.commit()
  28. conn.close()
  29. #ImportOracle的子類,用作導入csv文件的類
  30. class ImportOracleCsv(ImportOracle):
  31. #重構父類的inoracle函數,用作從csv讀取數據,返回標題和內容
  32. def inoracle(self):
  33. with open(self.filename, 'rb') as f:
  34. reader = csv.reader(f)
  35. contents = [i for i in reader]
  36. title = contents[0]
  37. data = contents[1:]
  38. return (title, data)
  39. #ImportOracle的子類,用作導入excel文件的類
  40. class ImportOracleExcel(ImportOracle):
  41. #重構父類的inoracle函數,用作從EXCEL文件讀取數據,返回標題和內容
  42. def inoracle(self):
  43. wb = xlrd.open_workbook(self.filename)
  44. sheet1 = wb.sheet_by_index(0)
  45. title = sheet1.row_values(0)
  46. data = [sheet1.row_values(row) for row in range(1, sheet1.nrows)]
  47. return (title, data)
  48. #ImportOracle的子類,在文件類型錯的情況返回
  49. class ImportError(ImportOracle):
  50. def inoracle(self):
  51. print 'Undefine file type'
  52. return 0
  53. #工廠選擇類,csv文件返回ImportOracleCsv類,EXCEL文件返回ImportOracleExcel類
  54. class ChooseFactory(object):
  55. choose = {}
  56. choose['csv'] = ImportOracleCsv()
  57. choose['xlsx'] = ImportOracleExcel()
  58. choose['xls'] = ImportOracleExcel()
  59. def choosefile(self, ch):
  60. if ch in self.choose:
  61. op = self.choose[ch]
  62. else:
  63. op = ImportError()
  64. return op
  65. if __name__ =="__main__":
  66. #定義文件名和數據庫表名
  67. file_name = '清單.xlsx'
  68. table_name= 'ygl_test'
  69. #獲取文件類型
  70. op = file_name.split('.')[-1]
  71. factory = ChooseFactory()
  72. #選擇工廠類處理,cal被賦值為處理的具體類
  73. cal = factory.choosefile(op)
  74. #設置類屬性(文件名)
  75. cal.filename = file_name
  76. #根據函數返回值設置類屬性(標題,內容)
  77. (cal.title, cal.data) = cal.inoracle()
  78. #設置類屬性(表名)
  79. cal.table_name = table_name
  80. #調用類的導入數據庫函數
  81. cal.ConnOracle()






附件列表

     


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM