mysql 结果集转数组_将MySQL结果集转换为NumPy数组的最有效方法是什么?

sirlark..23该解决方案使用Kieth的fromiter技术,但更直观地处理SQL结果的二维表结构.此外,它通过避免python数据类型中的所有重新整形和展平来改进Doug​​的方法.使用结构化数组,我们可以直接从MySQL结果读取到numpy,几乎完全删除python数据类型.我说"差不多"因为fetchall迭代器仍然会产生python元组.但有一点需要注意,但这不是一个大问题.您必须...
摘要由CSDN通过智能技术生成

sirlark..

23

该解决方案使用Kieth的fromiter技术,但更直观地处理SQL结果的二维表结构.此外,它通过避免python数据类型中的所有重新整形和展平来改进Doug​​的方法.使用结构化数组,我们可以直接从MySQL结果读取到numpy,几乎完全删除python数据类型.我说"差不多"因为fetchall迭代器仍然会产生python元组.

但有一点需要注意,但这不是一个大问题.您必须事先知道列的数据类型和行数.

知道列类型应该是显而易见的,因为你可能知道查询是什么,否则你总是可以使用curs.description,以及MySQLdb.FIELD_TYPE.*常量的映射.

知道行数意味着您必须使用客户端游标(这是默认值).我对MySQLdb和MySQL客户端库的内部结构还不太了解,但我的理解是,当使用客户端游标时,整个结果被提取到客户端内存中,尽管我怀疑实际上存在一些缓冲和缓存.这意味着为结果使用双内存,一次用于光标复制,一次用于数组复制,因此如果结果集很大,最好关闭光标以释放内存.

严格来说,您不必提前提供行数,但这样做意味着数组内存预先分配一次,并且不会随着更多行从迭代器进入而不断调整大小,这意味着提供巨大的性能提升.

有了这个,一些代码

import MySQLdb

import numpy

conn = MySQLdb.connect(host='localhost', user='bob', passwd='mypasswd', db='bigdb')

curs = conn.cursor() #Use a client side cursor so you can access curs.rowcount

numrows = curs.execute("SELECT id, rating FROM video&#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值