2015-11-05 32 views
0

我正在创建一个使用ZODB的新应用程序,我需要主要从postgres数据库导入遗留数据,但也需要从一些csv文件导入。数据的操作有限(sql连接合并链接表和创建属性,更改某些属性的名称,处理空列等)。使用pandas - read_csv或read_sql或blaze将数据从postgres复制到ZODB?

有了postgres数据的一个子集,我做了一个转储到所有相关表的csv文件,将它们读入熊猫数据框并做了处理。这可行,但有部分原因是由于首先将数据传输到csv。

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

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

有什么建议吗?我也读过一些名为Blaze的东西,并想知道我是否应该使用它。

+0

我会建议只是尝试'read_sql',看看这是否大于CSV方法更好。通常直接从数据库查询可能比读取csv文件慢,但这取决于很多参数(数据库设置,数据类型,网络,..) – joris

+0

谢谢,我会试试看。这将是很好的减少步骤,所以我可以告诉错误来自哪里。如果有人有证据支持它作为一个很好的选择。 – jogilder

回答

0

如果您的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') 
+0

因此,如果在内存中不应该是一个问题,为什么不只是使用熊猫? – jogilder

相关问题