1

tgzファイルを読み取ってcouchdbに書き込もうとしています。

これがコードです。

import couchdb
conn = couchdb.Server('http://localhost:5984')
db = conn['test']

with open('/tmp/test.txt.tgz.enc') as f:
     data = f.read()
     doc = {'file': data}
     db.save(doc)

それは失敗します

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "/usr/local/lib/python2.7/dist-packages/couchdb/client.py", line 407, in save
    _, _, data = func(body=doc, **options)
  File "/usr/local/lib/python2.7/dist-packages/couchdb/http.py", line 399, in post_json
    status, headers, data = self.post(*a, **k)
  File "/usr/local/lib/python2.7/dist-packages/couchdb/http.py", line 381, in post
    **params)
  File "/usr/local/lib/python2.7/dist-packages/couchdb/http.py", line 419, in _request
    credentials=self.credentials)
  File "/usr/local/lib/python2.7/dist-packages/couchdb/http.py", line 176, in request
    body = json.encode(body).encode('utf-8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 11: ordinal not in range(128)

まだ自分で解決策を見つけるためにグーグルで回っています。

4

2 に答える 2

3

わかりました私はそれを解決しました。ドキュメントを再確認したところ、put_attachment 関数がありますが、添付ファイルを割り当てる前にドキュメントを作成する必要があります。

他の誰かがそれを必要とする場合のコード例:

import couchdb

conn = couchdb.Server('http://localhost:5984')
db = conn['test1']

doc = {'name': 'testfile'}
db.save(doc)
db.put_attachment(doc, data, filename="test.txt.tgz")
于 2012-11-24T20:31:13.543 に答える
0

ki わかりました。以下の例を参照してください db=couch.create('test1')-これは、test1 でデータベース名を作成するためのものです。 ('/home/yamunapriya/pythonpractices/addd.py','r') - 読み込みモードでファイルを開く.db.save(doc) - ファイルを保存するcouchdb.db.put_attachment(doc,f, filename="/home/yamunapriya/pythonpractices/addd.py") - このパラメーターでは、doc-key 値のペア、f-filename/読み取り/書き込みモードのパス、filename

import couchdb  

couch=couchdb.Server()
db=couch.create('test1') 
doc={'name':'testfile'}  
f=open('/home/yamunapriya/pythonpractices/addd.py','r')
db.save(doc)  
db.put_attachment(doc,f,filename="/home/yamunapriya/pythonpractices/addd.py") 
于 2013-02-16T12:43:10.803 に答える