我正在将 mongo 数据库移植到 PostgreSQL 数据库中,但遇到了一个问题。我正在使用psycopg2
's COPY_FROM
,它将文件对象、要写入的表和其他可选参数作为参数。我的原始代码如下所示:
records = '\n'.join(','.join([row['id'], row['att1'], row['att3']]) for row in data)
fio = io.StringIO(records)
cursor.copy_from(fio, 'mytable', sep=',')
postgres.commit()
上面的代码工作正常,但对于包含逗号的列(以逗号分隔)失败。因此,我想避开所有可能干扰的逗号和其他标点符号。为此,我使用了 Python 的csv
模块来处理这个问题并得到以下代码:
fio = io.StringIO()
writer = csv.writer(fio)
writer.writerows([row['id'], row['att1'], row['att3']]) for row in data)
cursor.copy_from(fio, 'mytable', sep=',')
postgres.commit()
使用上面的代码,mytable
无论如何都是空的。fio
我在编写行后尝试迭代,内容与初始代码片段中的相同(使用','.join
)。我还检查了对象的大小,在写入记录后它在两个片段中的大小大致相同。
我在这里想念什么?为什么在第二个示例中没有将数据写入表中?