我正在使用couchdb开发更新处理程序,遇到了一个奇怪的问题:
这里是我的更新处理程序:
"updates": {
"temp": "function(doc, req) {var inc_amount =JSON.parse(req.query.amount);doc[1]=inc_amount;return [doc, JSON.stringify(inc_amount) + JSON.stringify({\"STATUS\": \"message\"})];}"
},
这是我的couchdb文档:
^{pr2}$我想用amount
查询参数的值更新此文档。下面是如何使用命令行(基本上是curl):
curl -X PUT http://localhost:5984/db/_design/designdoc/_update/temp/my_doc?amount='\{"a":\{"b":"c"\}\}'
这个命令对我很有效。但是,由于这个更新是由python代码调用的,所以我不希望为curl
单独使用subprocess
来完成这些工作。相反,我在寻找一种Python的解决方案。以下是我尝试使用requests模块实现的功能:
>>> import json
>>> d={'a':{'b':'c'}}
>>> d
{'a': {'b': 'c'}}
>>> s=json.dumps(d)
>>> s
'{"a": {"b": "c"}}'
>>> import requests
>>> r=requests.put('http://localhost:5984/file_status_collector/_design/reportsDesignDoc/_update/temp/my_doc', data = {'amount': s})
>>> r.status_code
500
>>> r.text
u'{"error":"render_error","reason":"function raised error: (new SyntaxError(\\"JSON.parse\\", \\"/opt/local/share/couchdb/server/main.js\\", 481)) \\nstacktrace: SyntaxError(\\"JSON.parse\\")@:0\\n(\\"undefined\\")@/opt/local/share/couchdb/server/main.js:481\\n([object Object],[object Object])@:0\\napply([object Object],[object Array])@:0\\nrunUpdate(function (doc, req) {var inc_amount = JSON.parse(req.query.amount);doc[1] = inc_amount;return [doc, JSON.stringify(inc_amount) + JSON.stringify({STATUS:\\"message\\"})];},[object Object],[object Array])@/opt/local/share/couchdb/server/main.js:952\\n(function (doc, req) {var inc_amount = JSON.parse(req.query.amount);doc[1] = inc_amount;return [doc, JSON.stringify(inc_amount) + JSON.stringify({STATUS:\\"message\\"})];},[object Object],[object Array])@/opt/local/share/couchdb/server/main.js:1021\\napply(null,[object Array])@:0\\n(\\"_design/reportsDesignDoc\\",[object Array],[object Array])@/opt/local/share/couchdb/server/main.js:1492\\napply(null,[object Array])@:0\\n()@/opt/local/share/couchdb/server/main.js:1535\\n@/opt/local/share/couchdb/server/main.js:1546\\n"}\n'
在这里我遇到了一个问题。所以,我想把json字符串s
改成我给curl的格式:
>>> s=s.replace(' ','').replace('{','\{').replace('}','\}')
>>> s
'\\{"a":\\{"b":"c"\\}\\}'
>>> print s
\{"a":\{"b":"c"\}\}
>>> r=requests.put('http://localhost:5984/file_status_collector/_design/reportsDesignDoc/_update/temp/my_doc', data = {'amount': s})
>>> r.status_code
500
>>> r.text
u'{"error":"render_error","reason":"function raised error: (new SyntaxError(\\"JSON.parse\\", \\"/opt/local/share/couchdb/server/main.js\\", 481)) \\nstacktrace: SyntaxError(\\"JSON.parse\\")@:0\\n(\\"undefined\\")@/opt/local/share/couchdb/server/main.js:481\\n([object Object],[object Object])@:0\\napply([object Object],[object Array])@:0\\nrunUpdate(function (doc, req) {var inc_amount = JSON.parse(req.query.amount);doc[1] = inc_amount;return [doc, JSON.stringify(inc_amount) + JSON.stringify({STATUS:\\"message\\"})];},[object Object],[object Array])@/opt/local/share/couchdb/server/main.js:952\\n(function (doc, req) {var inc_amount = JSON.parse(req.query.amount);doc[1] = inc_amount;return [doc, JSON.stringify(inc_amount) + JSON.stringify({STATUS:\\"message\\"})];},[object Object],[object Array])@/opt/local/share/couchdb/server/main.js:1021\\napply(null,[object Array])@:0\\n(\\"_design/reportsDesignDoc\\",[object Array],[object Array])@/opt/local/share/couchdb/server/main.js:1492\\napply(null,[object Array])@:0\\n()@/opt/local/share/couchdb/server/main.js:1535\\n@/opt/local/share/couchdb/server/main.js:1546\\n"}\n'
但是,我没有帮忙,现在,我放下了我的手臂。不知道我该怎么用Python的方式来做。这里肯定需要你的帮助。你能帮我解决以下问题吗:
requests.put
中的json?requests.put
能处理这样的请求吗?如果是,请纠正我的执行方式。在
目前没有回答
相关问题 更多 >
编程相关推荐