Python第17课:两个数据表如何比对碰撞?(二)
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秒。