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

Copying data from postgres to ZODB using pandas - read_csv or read_sql or blaze?

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

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

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

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

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

如果您的 CSV 文件不是很大(如您所说),那么我会尝试使用 odo, then using blaze 将所有内容加载到 postgres 中以执行操作,然后最后转储为 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')