Python第17课:两个数据表如何比对碰撞?(二)

2019-01-30  本文已影响0人  启蒙时代

Python第17课:两个数据表如何比对碰撞?(二)

时间 2019-01-30 下午4:00

主讲 刘培富

地点 四楼电教室


一、读取excel的包xlrd

import xlrd

data=xlrd.open_workbook(r'E:\abc.xlsx')

table = data.sheet_by_index(0)#通过索引顺序获取

# table = data.sheet_by_name(u'Sheet1')#通过名称获取,这个不行就用上一个

print(table.cell(1,1).value.strip()) #一定要使用.strip()

总行数:table.nrows

二、写入excel的包xlwt

import xlwt

import datetime

workbook = xlwt.Workbook()

worksheet = workbook.add_sheet('My Sheet')

style = xlwt.XFStyle()

worksheet.write(0, 0, "张三", style)

worksheet.write(0, 1, "李四", style)

workbook.save('E:\\abc.xls')

三、将Excel表导入oracle数据表:

import xlrd,cx_Oracle

from time import ctime

print(ctime())

conn=cx_Oracle.connect('lpf/******@//1****/orcl')

cur=conn.cursor()

data=xlrd.open_workbook(r'E:\dian.xlsx')

#table=data.sheet_by_name(u'Sheet1')

table=data.sheet_by_index(0)

wt=""

for i in range(1,table.nrows):

    try:

    sql="insert into diandong(id,xm,gmsfhm,chepai) values(%d,'%s','%s','%s')"%(i,table.cell(i,10).value.strip(),table.cell(i,9).value.strip(),table.cell(i,1).value.strip())

    print(i)

    cur.execute(sql)

    conn.commit()

    except:

    wt+=str(i)+","

cur.close()

conn.close()

print("有问题而导入失败的行有:"+wt)

print(ctime())

经过实际操作证实,导入3万条数据,需要3分钟左右。

四、两个数据表比对碰撞:

完成比对1.9亿次,用时28秒。

五、用SQL语句直接比对

以上,是使用python操作数据库,好处是可视、可控,便于调试,便于控制结果输出,不足之处是,由于两次遍历全部数据,导致比对效率低。我们也可以直接使用SQL语句,完成两个表之前对某一列数据的比对。

select * from "LPF"."DIANDONG" where "GMSFHM" in (select GMSFHM from "LPF"."ZAITAO")

同样的数据量,用时仅0.03秒。

上一篇下一篇

猜你喜欢

热点阅读