2017-11-27 27 views
0

これは私がやろうとしていることです。私はpostgresデータベースに入力する.csvファイルを入力しようとしています。私はpsycopg2とcur_copy_exportを使ってこれを行っています。しかし、私は以下のようなエラーでヒットしました。このエラーを克服するにはどうすればよいですか?事前にpsycopg2.DataError:無効なバイトシーケンス

おかげ

エラー:以下のように

cur.copy_expert(sql=copy_sql, file=myfile) 
    psycopg2.DataError: invalid byte sequence for encoding "UTF8": 0xdf 0x65 
    CONTEXT: COPY agents, line 1117 

マイコード:

//open file from Amazon S3 Bucket 
opener = urllib.URLopener() 
myurl=("Amazon S3 bucket URL" + srcbucketid + "/" + file_name) 
myfile=opener.open(myurl) 

copy_sql = """ COPY agents (
UniqueId, 
Code, 
CountryCode, 
DefaultCommissionRate, 
ReportingName) 
FROM stdin WITH CSV HEADER DELIMITER as ',' QUOTE '\b' NULL AS ''""" 

cur.copy_expert(sql=copy_sql, file=myfile) 

マイデータベース符号化方式は、 "UTF8" の形式です。私はそれを現在の生産データベースとして変更することはできません。

答えて

0
copy_source = {'Bucket': srcbucketid, 'Key': file_name} 
client.copy(copy_source, srcbucketid, 'tmp/{}'.format(file_name)) 
key = ('s3://'+srcbucketid+'tmp/'+file_name) 
print(key) 
BLOCKSIZE = 1024*1024 
with s3.open('s3://'+srcbucketid+'/'+file_name, 'rb') as inf: 
    with s3.open('s3://'+srcbucketid+'/tmp/'+file_name, 'wb') as ouf: 
     while True: 
      data = inf.read(BLOCKSIZE) 
      if not data: break 
      converted = data.decode('latin1').encode('utf-8') 
      ouf.write(converted) 
関連する問題