我无法从 MS SQL Server 数据库中查询超过 500 万条记录的表。我想选择所有记录,但是在将大量数据选择为内存中时,我的代码似乎失败了。
这有效:
import pandas.io.sql as psql
sql = "SELECT TOP 1000000 * FROM MyTable"
data = psql.read_frame(sql, cnxn)
...但这不起作用:
sql = "SELECT TOP 2000000 * FROM MyTable"
data = psql.read_frame(sql, cnxn)
它返回此错误:
File "inference.pyx", line 931, in pandas.lib.to_object_array_tuples
(pandas\lib.c:42733) Memory Error
我在这里读到,从 csv 文件创建时存在类似的问题dataframe
,解决方法是使用这样的“迭代器”和“块大小”参数:
read_csv('exp4326.csv', iterator=True, chunksize=1000)
从 SQL 数据库中查询是否有类似的解决方案?如果没有,首选的解决方法是什么?我应该使用其他一些方法来分块读取记录吗?我在这里阅读了一些关于在 pandas 中处理大型数据集的讨论,但执行 SELECT * 查询似乎需要做很多工作。当然有更简单的方法。