我需要在python脚本的Postgres表中插入几行,并且正在使用建议将copy_from用于性能目的。
import io
data_io = io.StringIO()
# here I have a loop which is omitted for simplicity
data_io.write("""%s\t%s\n""" % (115, 500))
DB = sql.DB()
DB._db_cur.copy_from(data_io, "temp_prices", columns=('id', 'price'))
在我的代码中,我使用一些循环用值填充“数据”,上面是一个示例。
但是表'temp_prices'为空,没有引发错误
我知道我需要的数据已写入data_io,因为使用时可以看到它:
print (data_io.getvalue())
我在做什么错了?
答案 0 :(得分:1)
您并没有寻求重新开始。读写文件使用文件位置指针,该指针在您每次写入文件或从文件中读取时都会前进。现在,指针位于文件对象的末尾,因此读取不会返回任何内容:
>>> import io
>>> data_io = io.StringIO()
>>> data_io.write("""%s\t%s\n""" % (115, 500))
8
>>> data_io.read()
''
在要求data_io.seek(0)
读取数据之前,使用copy_from
将文件位置放回开头:
>>> data_io.seek(0)
0
>>> data_io.read()
'115\t500\n'
在旁注:我将使用csv
module将制表符分隔的数据写入文件:
import csv
writer = csv.writer(data_io, delimiter='\t')
writer.writerow((115, 500))