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

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

作者: 启蒙时代 | 来源:发表于2019-01-30 17:23 被阅读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秒。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/znhfsqtx.html