我有一个游标,用于从数据库中检索数据。
执行查询后,我通常会使用fetchall()
将其存储在pandas数据框中。
一旦数据变得太大而无法存储,此方法将不再起作用。
我正在考虑使用dask存储结果以进行进一步分析。刚接触时,我想知道什么是最好的解决方法。
例如
query = """SELECT * FROM table"""
cursor.execute(query)
# Would usually do something like
df = pd.DataFrame([i for i in cursor.fetchall()])
答案 0 :(得分:2)
cursor
对象不适用于这种情况,因为它具有单个连接会话和状态,因此您无法在线程或进程之间有意义地共享它,而只能对其进行迭代(当您理解)。
Dask确实有read_sql_table
用于这种工作,顾名思义,它是用于从表而不是广义查询中加载。
您可能还对intake-sql感兴趣,其中包括上述功能的插件和常规查询的插件,您事先知道如何使用WHERE语句进行分区。这是在Intake项目的上下文中进行的,该项目使您可以将数据加载规范编码到数据源目录中。