python执行命令并返回结果集_使用大型数据集调用cursor.fetchall()时,python脚本会挂起...

我有一个返回超过125K行的查询.

目标是编写迭代遍历行的脚本,并为每个行填充第二个表,其中包含从查询结果处理的数据.

为了开发脚本,我用一小部分数据创建了一个重复的数据库(4126行)

在小型数据库上,以下代码有效:

import os

import sys

import random

import mysql.connector

cnx = mysql.connector.connect(user='dbuser', password='thePassword',

host='127.0.0.1',

database='db')

cnx_out = mysql.connector.connect(user='dbuser', password='thePassword',

host='127.0.0.1',

database='db')

ins_curs = cnx_out.cursor()

curs = cnx.cursor(dictionary=True)

#curs = cnx.cursor(dictionary=True,buffered=True) #fail

with open('sql\\getRawData.sql') as fh:

sql = fh.read()

curs.execute(sql, params=None, multi=False)

result = curs.fetchall() #<=== script stops at this point

print len(result) #<=== this line never executes

print curs.column_names

curs.close()

cnx.close()

cnx_out.close()

sys.exit()

行大小curs.execute(sql,params = None,multi = False)在大型和小型数据库上都成功.

如果我在循环中使用curs.fetchone(),我可以读取所有记录.

如果我改变了这条线:

curs = cnx.cursor(dictionary=True)

阅读:

curs = cnx.cursor(dictionary=True,buffered=True)

该脚本挂起在curs.execute(sql,params = None,multi = False).

我找不到有关fetchall()的任何限制的文档,也没有找到任何方法来增加缓冲区大小,也无法分辨我甚至需要多大的缓冲区.

没有例外.

我该如何解决这个问题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值