在SQLAlchemy模型中存储pandas DataFrame

时间:2014-05-06 00:36:05

标签: python pandas flask sqlalchemy

我正在建立一个烧瓶应用程序,允许用户上传CSV文件(包含不同的列),预览上传的文件,生成摘要统计信息,执行复杂的转换/聚合(有时通过Celery作业),然后导出修改后的数据。上传的文件被读入pandas DataFrame,这使我能够优雅地处理大部分复杂的数据工作。

我希望这些DataFrame以及相关的元数据(上传时间,上传文件的用户ID等)能够持续存在,并且可供多个用户传递到各种视图。但是,我不确定如何最好地将数据合并到我的SQLAlchemy模型中(我在后端使用PostgreSQL)。

我考虑过三种方法:

  • 将DataFrame塞入PickleType并将其直接存储在数据库中。这似乎是最直接的解决方案,但意味着我将大型二进制对象粘贴到数据库中。
  • 挑选DataFrame,将其写入文件系统,并将路径存储为模型中的字符串。这使数据库保持较小,但在备份数据库时允许用户执行删除以前上载的文件等操作时增加了一些复杂性。
  • 将DataFrame转换为JSON(DataFrame.to_json())并将其存储为json类型(映射到PostgreSQL' s json类型)。这增加了每次访问DataFrame时解析JSON的开销,但它也允许通过PostgreSQL JSON operators直接操作数据。

鉴于每种方法的优点和缺点(包括我不知道的那些),是否有将pandas DataFrames合并到SQLAlchemy模型的首选方法?

1 个答案:

答案 0 :(得分:5)

转向JSON和PostgreSQL解决方案。我正在使用Pickle on file系统开始的Pandas项目,并将数据加载到类对象中,以便使用pandas进行数据处理。但是,随着数据变得越来越大,我们使用了SQLAlchemy / SQLite3。现在,我们发现使用SQLAlchemy / PostgreSQL更好。我认为我们的下一步将是JSON。 玩得开心!熊猫岩石!