工作中遇到的乙個需求,將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...