使用pandas-read_csv或read_sql或blaze将数据从postgres复制到ZODB



我正在创建一个使用ZODB的新应用程序,我需要主要从postgres数据库导入遗留数据,也需要从一些csv文件导入。数据所需的操作量有限(sql联接以合并链接表并创建属性、更改某些属性的名称、处理空列等)。

使用postgres数据的一个子集,我将所有相关表的csv文件转储,将这些文件读取到panda数据帧中并进行操作。这是可行的,但也有一些错误,部分原因是先将数据传输到csv中。

我现在想加载中的所有数据(并消除错误)。我想知道直接连接到数据库并使用read_sql或继续使用csv文件是否有意义。

最大的表(csv文件)只有8MB,所以我希望不会有内存问题。大多数错误与编码和/或分隔符的选择有关(数据包含|、;、:和')。

有什么建议吗?我也读过一些叫做Blaze的东西,不知道我是否真的应该使用它。

如果您的CSV文件不是很大(正如您所说),那么我会尝试使用odo将所有内容加载到postgres中,然后使用blaze执行操作,最后将其转储为ZODB能够理解的格式。我不会担心像join这样的操作在数据库中的性能,而不是在内存中的性能。

下面是一些示例代码:

from blaze import odo, Data, join
for csv, tablename in zip(csvs, tablenames):
    odo(csv, 'postgresql://localhost/db::%s' % tablename)
db = Data('postgresql://localhost/db')
# see the link above for more operations
expr = join(db.table1, db.table2, 'column_to_join_on')
# execute `expr` and dump the result to a CSV file for loading into ZODB
odo(expr, 'joined.csv')

最新更新