2012-11-24 22 views
1

我想讀取一個tgz文件並將其寫入到couchdb。用python存儲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) 

依然圍繞谷歌搜索找到一個解決方案自己。

+0

看看:http://api.mongodb.org/python/1.11/examples/gridfs.html –

+0

我說的是couchdb不是mongodb。但是,謝謝,是的,我知道mongodb,但couchdb被選中。 – dave

+0

你能告訴我們你的文件裏有什麼嗎? (或其中的一部分) – alexvassel

回答

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") 
+1

在這個例子中,不需要顯式地讀取文件內容,只需要'db.put_attachment(doc,f,filename =「test.txt.tgz」)'並且在這裏。 – Kxepal

+0

@kxepal耶剛剛也認爲:-)謝謝! – dave

0

き得到it.See這個例子以下DB = couch.create(「TEST1」) - 這是創建test1.doc數據庫名稱= {'name':'testfile'} - 這是key的值pair.f = open('/ home/yamunapriya/pythonpractices/addd.py','r') - 這是用read mode打開文件.db .save(doc) - 保存文件couchdb.db.put_attachment(doc,f,filename =「/ home/yamunapriya/pythonpractices/addd.py」) - 在此參數doc-key值對中,f-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")