【问题标题】:How to write out to compressed file with pyscopg2.copy_to or copy_expert?如何使用 pyscopg2.copy_to 或 copy_expert 写入压缩文件?
【发布时间】:2016-08-18 18:31:22
【问题描述】:

我见过的所有例子都使用了psqlCOPY COMMAND | gzip > 'filename' 之类的东西。如果可能的话,我更喜欢使用带有psycopg2 的解决方案,并且我认为将其写出到处理数据然后写出压缩的gzip 文件的字符串缓冲区类型对象可能会很好。

我该怎么做?

【问题讨论】:

  • 你知道Gzip 模块吗?
  • 我一直在使用它,只是看了一眼,也许GzipFile 对象可能是答案?

标签: python postgresql psycopg2


【解决方案1】:

psycopg 的文档说copy_to 接受任何类似文件的对象。因此,您可以简单地使用gzip.open 打开一个可写的 gzip 类文件对象:

import gzip

with gzip.open('table-data.gz', 'wb') as gzip_file:
    cursor.copy_to(gzip_file, 'my_table')

或者,如果您更喜欢以某种编码编写文本,并且在 Python 3.3+ 上,您可以使用模式'wt' 并添加encoding='UTF-8' 或类似于gzip.open

【讨论】:

  • 太棒了,有没有办法执行一个中间步骤,在写出之前添加几个 etl 跟踪字段?
  • 您可以将其写入io.BytesIOio.StringIO,但它会被保存在内存中!你确定你有足够的内存?可能最简单的方法是将其假脱机到一个文件中,然后从该文件处理它到另一个文件,另一种方法是编写一个类,该类可以处理通过它写入的行。
  • 编写一个类来处理添加的行正是我的想法,我一直在尝试为类似的事情找到一个好的起点。如果您能指出我在 github 上的库或文件的方向,我可以偷看一下,我将非常感激!主要是流媒体部分让我感到困惑。你会想到一个协同程序吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多