COPY LOCAL

时间:2018-06-27 11:36:56

标签: python python-3.x python-2.7 vertica

我在 Vertica 7.1 上的python中将此代码用于'COPY LOCAL'

conn_info = {'host': '192.168.1.1', 'port': 5433, 'user': 'dbadmin', 'password': 'xxxxxx', 'database': 'db'}
connection = vertica_python.connect(**conn_info)
cur = connection.cursor()
file_name="/tmp/tmp_file"
temp_file = open(file_name,"w")
temp_file .write(records)
temp_file.close()
os.system('gzip -cvf9 %s > %s.gz'%(file_name,file_name))
qr="copy tmp_table(int_id, int_timestamp, ... ) from local '%s' GZIP delimiter ';' RECORD TERMINATOR E'\\r' NULL  '\\N';"%(file_name+'.gz')
cur.execute(qr)

但是我现在想在 Vertica 9.0.1 上执行相同的操作,但出现此错误:

  

回溯(最近通话最近一次):

     

文件

中的文件“ collector_as.py”,第264行
cur.execute(qr)
     

execute中的文件“ /usr/local/lib/python2.7/dist-packages/vertica_python/vertica/cursor.py”,第126行

self.connection.process_message(self._message)
     

process_message中的文件“ /usr/local/lib/python2.7/dist-packages/vertica_python/vertica/connection.py”,第232行

raise errors.MessageError("Unhandled message: {0}".format(message))
     

MessageError:未处理的消息:

我的vertica-python版本:

pip freeze | grep vertica  -->  vertica-python==0.7.3

------------------------

,我尝试了VERTICA中的新vertica-db-client(vertica-client-9.0.1-4.x86_64.tar.gz)
我的vertica-db-client版本:

pip freeze | grep vertica  -->  vertica-db-client==9.0.1.4

我收到此错误:

  

回溯(最近通话最近一次):

     

文件

中的文件“ collector_as.py”,第265行
cur.execute(qr)
     

NotSupportedError:不支持COPY LOCAL

1 个答案:

答案 0 :(得分:0)

在使用vertica-python进行COPY命令时,请使用cur.copy(...)方法。

游标的复制方法带有两个参数

  1. 复制命令
  2. 要复制的文件

此外,您使用FROM LOCAL代替FROM STDIN

qr="copy tmp_table(int_id, int_timestamp, ... ) from STDIN GZIP delimiter ';' RECORD TERMINATOR E'\\r' NULL  '\\N';"
cur.copy(qr, file_name+'.gz')

例如,如果您使用的是vsql,则使用FROM LOCAL的语法将是正确的,但是vertica-python基本上将给出的文件作为第二个参数,并将其作为STDIN传递到复制命令中。