Python 在SQLAlchemy模型中存储数据帧

Python 在SQLAlchemy模型中存储数据帧,python,pandas,flask,sqlalchemy,Python,Pandas,Flask,Sqlalchemy,我正在构建一个flask应用程序,它允许用户上传CSV文件(具有不同的列)、预览上传的文件、生成摘要统计信息、执行复杂的转换/聚合(有时通过芹菜作业),然后导出修改后的数据。上传的文件被读取到熊猫数据框中,这使我能够优雅地处理大多数复杂的数据工作 我希望这些数据帧以及相关的元数据(上传的时间、上传文件的用户ID等)能够持久化,并可供多个用户传递到各种视图。但是,我不确定如何最好地将数据合并到我的SQLAlchemy模型中(我在后端使用PostgreSQL) 我考虑过三种方法: 将数据帧塞入Pi

我正在构建一个flask应用程序,它允许用户上传CSV文件(具有不同的列)、预览上传的文件、生成摘要统计信息、执行复杂的转换/聚合(有时通过芹菜作业),然后导出修改后的数据。上传的文件被读取到熊猫数据框中,这使我能够优雅地处理大多数复杂的数据工作

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

我考虑过三种方法:

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

考虑到每种方法的优点和缺点(包括我不知道的),有没有更好的方法将pandas数据帧合并到SQLAlchemy模型中?

使用JSON和PostgreSQL解决方案。我参与了一个Pandas项目,该项目从文件系统上的Pickle开始,并将数据加载到一个类对象中,以便使用Pandas进行数据处理。然而,随着数据变得越来越大,我们使用SQLAlchemy/SQLite3。现在,我们发现使用SQLAlchemy/PostgreSQL甚至更好。我认为我们的下一步将是JSON。
玩得高兴熊猫岩石

将每个数据帧本身写入单独的postgresql表是一个选项吗?(使用
to_sql
)嗯……我也可以试试(使用自定义to_sql方法,因为PostgreSQL还不受支持)。我可以动态地生成这些表的名称,并通过单独的模型和相关的元数据跟踪它们。然后,当我需要引用该对象时,我可以从该对象中提取表名,并从表中将其读回数据帧。我想知道与其他方法相比有什么优势?SQLACHE我的支持将出现在14.0版(预计将在2014年5月发布)中的
to_sql
。没有在开发版本中尝试过,但可能是一个有趣的选择。事实上,在开发版本中,PostgreSQL将被支持通过sqlalchemy写入sql。因此,您可以尝试开发版本,或者下周可能会发布第一个候选版本。如果您只想存储数据,我认为您最好对不同的选项进行一些比较(例如性能)。使用
to_sql
当然可以直接访问postgresql中的数据(查询部分数据帧、其他sql操作等),但我不知道您是否需要它。您最终做了什么?