首页 > 解决方案 > Python:从 Postgres 保存数据集以供上次加载

问题描述

我将使用存储在具有只读访问权限的 PostgreSQL 服务器中的非常大的时空数据集。目标是将这些数据集加载到 Python 环境中,进行所有处理并创建某种学习模型。

每次我想要工作时,将这些数据集从 postgres 加载到 python 中并不是一个好主意。

我想知道是否有办法让 Postgres 将这些数据集以一种格式(例如.pkl.hdf)转储到磁盘,以支持未来更快的加载。我真的不认为\COPYcsv是一个选择。

标签: pythonpostgresql

解决方案


如果您从 PostgreSQL 出发,那么 COPY 或 \copy 是您唯一的选择。你还没有说为什么那不可行。

我假设数据库正在发生变化,并且您希望将最近的数据提取到您的 Python 程序中。如果数据库是静态的,那么您可能

  • 使用 COPY 或 \copy 一次
  • 将结果读入 Python
  • 将数据保存为另一种格式

另一种解决问题的方法是使用数据库连接器从 Python 中提取数据。此解决方案特定于 MySQL,但应与 PostgreSQL 数据连接器一起使用。这是适用于 PostgreSQL 的代码:

import psycopg2
import numpy

conn = psycopg2.connect(host='localhost', user='bob', passwd='mypasswd', db='bigdb')
curs = conn.cursor() 
numrows = curs.execute("SELECT id, rating FROM video")

#dtype='i4,i4' means two columns, both 4 byte (32 bit) integers
# you will have to adapt to your data type and data structure
A = numpy.fromiter(curs.fetchall(), count=numrows, dtype=('i4,i4'))

推荐阅读