python-cursor

原创
2018/03/08 16:03
阅读数 716

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

        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()

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部