0

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

使用 postgres 数据的子集,我将所有相关表的 csv 文件转储,将它们读入 pandas 数据帧并进行操作。这可行,但存在错误,部分原因是首先将数据传输到 csv 中。

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

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

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

4

1 回答 1

0

如果您的 CSV 文件不是很大(如您所说),那么我会尝试使用 将所有内容加载到 postgres 中odo,然后使用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')
于 2015-11-06T19:28:49.670 回答