將excel資料匯入oracle資料庫,作對比

2021-10-03 11:57:50 字數 3374 閱讀 7637

工作中遇到的乙個需求,將excel資料匯入oracle資料庫,與資料庫對應表作對比,按要求輸出可執行sql語句,實施如下:

#-*-coding:utf-8-*- 

#encoding=gbk

import os

import sys

import cx_oracle

import pandas as pd

import xlrd

os.environ['nls_lang'] = 'simplified chinese_china.utf8'

###########將xls、xlsx、csv資料匯入資料庫

class importoracle(object):

def inoracle(self):

pass

def connoracle(self):

conn = cx_oracle.connect('使用者名稱/密碼@資料庫ip:1521/hdmon')

cursor = conn.cursor()

fields = [i+' varchar2(200)' for i in self.title]

fields_str = ', '.join(fields)

sql = 'create table %s (%s)' % (self.table_name, fields_str)

#print(sql)

cursor.execute(sql)

a = [':%s' %i for i in range(len(self.title)+1)]

value= ','.join(a[1:])

sql = 'insert into %s values(%s)' %(self.table_name, value)

#print(sql)

cursor.prepare(sql)

cursor.executemany(none, self.data)

cursor.close()

conn.commit()

conn.close()

class importoraclecsv(importoracle):

def inoracle(self):

with open(self.filename, 'rb') as f:

reader = csv.reader(f)

contents = [i for i in reader]

title = contents[0]

data = contents[1:]

return (title, data)

class importoracleexcel(importoracle):

def inoracle(self):

wb = xlrd.open_workbook(self.filename)

sheet1 = wb.sheet_by_index(0)

title = sheet1.row_values(0)

data = [sheet1.row_values(row) for row in range(1, sheet1.nrows)]

return (title, data)

class importerror(importoracle):

def inoracle(self):

print('undefine file type')

return 0

class 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 op

def create_table(file_name,table_name):

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

###########將xls、xlsx、csv資料匯入oacle資料庫

def create_insert(file_name,table_name):

conn = cx_oracle.connect('使用者名稱/密碼@資料庫ip:1521/hdmon')

cursor = conn.cursor()

v_sql='select table_name from user_tables'

try:

# 解析sql語句

cursor.parse(v_sql)

# 捕獲sql異常

except cx_oracle.databaseerror as e:

print(e)

cursor.execute(v_sql) #使用cursor進行各種操作

for i in cursor.fetchall():

if(i[0]==table_name):

print(i[0])

warnings.filterwarnings("ignore")

d_sql='drop table "'+str(i[0])+'"'

print(d_sql)

drop_sql(d_sql)

else:

pass

create_table(file_name,table_name)

cursor.close() #關閉cursor

conn.commit()#提交

if __name__ == '__main__':

# 在資料庫中插入mis賬號審閱資料

create_insert('import_file\mis.xls',"mis")

# 將mis資料導到雷達庫mis_sys表

del_sql('delete from "mis_sys"')

insert_sql(open("parameter\mis\mis_sys_insert.txt", 'r').read())

將Excel資料匯入MySql

將excel資料匯入mysql 1.將選中的資料快兒拷貝到乙個txt文字檔案中 記得把後面的空格消掉。假如存到 d data.txt 這個位置裡。2.根據要匯入的資料快兒建立mysql資料庫和表,然後進入命令提示符裡使用命令 load data local infile d data.txt int...

將Excel資料匯入MySql

1.將選中的資料快兒拷貝到乙個txt文字檔案中 記得把後面的空格消掉。否則匯入資料庫後會有對應的空行 假如存到 d data.txt 這個位置裡。2.根據要匯入的資料快兒建立mysql資料庫和表,然後進入命令提示符裡使用命令 load data local infile d data.txt int...

將Excel資料匯入MySql

1.將選中的資料快兒拷貝到乙個txt文字檔案中 記得把後面的空格消掉。假如存到 d data.txt 這個位置裡。2.根據要匯入的資料快兒建立mysql資料庫和表,然後進入命令提示符裡使用命令 load data local infile d data.txt into table exceltom...