python-cursor

最近做一个查询小工具时,发现查询效率低下,查看日志输出后,定位问题到其中一段循环遍历逻辑。

        self.logger.info("Execute sql %s", sql)
        result = {}
        for record in cur.execute(sql):
            row = {}
            for i, field in enumerate(self.fields_ajjbxx):
                row[field] = record[i]
            result[record[0]] = row
        cur.close()
        conn.close()
        return result

开始以为是其中多层循环嵌套的问题,在将循环单独提取出来测试发现循环的效率是挺快的。问题原因是execute方法。

Python的cursor对象在执行execute方法后,并不是一次性将所有的记录取出,而是分段取出,默认一次取50条。也就是说在数据量较大时,会不停的与数据库开启关闭连接。造成效率低下的问题。

通过cursor对象API:

    常用方法:
        close():关闭此游标对象
       fetchone():得到结果集的下一行
        fetchmany([size = cursor.arraysize]):得到结果集的下几行
        fetchall():得到结果集中剩下的所有行
        excute(sql[, args]):执行一个数据库查询或命令
        excutemany(sql, args):执行多个数据库查询或命令
    常用属性:
        connection:创建此游标对象的数据库连接
        arraysize:使用fetchmany()方法一次取出多少条记录,默认为1
        lastrowid:相当于PHP的last_inset_id()

 

转载于:https://my.oschina.net/zyldsy/blog/1631724

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值