我正在做一个项目,我想通过 Web 应用程序获取一些用户输入,并将该数据发送到 cloudant DB。我将python用于用例。下面是示例代码:
import requests
import json
dict_key ={}
key = frozenset(dict_key.items())
doc={
{
"_ID":"1",
"COORD1":"1,1",
"COORD2":"1,2",
"COORD3":"2,1",
"COORD4":"2,2",
"AREA":"1",
"ONAME":"abc",
"STYPE":"black",
"CROPNAME":"paddy",
"CROPPHASE":"initial",
"CROPSTARTDATE":"01-01-2017",
"CROPTYPE":"temp",
"CROPTITLE":"rice",
"HREADYDATE":"06-03-2017",
"CROPPRICE":"1000",
"WATERRQ":"1000",
"WATERSRC":"borewell"
}
}
auth = ('uid', 'pwd')
headers = {'Content-type': 'application/json'}
post_url = "server_IP".format(auth[0])
req = requests.put(post_url, auth=auth,headers=headers, data=json.dumps(doc))
#req = requests.get(post_url, auth=auth)
print json.dumps(req.json(), indent=1)
当我运行代码时,我收到以下错误:
"WATERSRC":"borewell"
TypeError: unhashable type: 'dict'
我搜索了一下,发现下面的stackflow链接作为一个预期的解决方案
它说“要将字典用作键,您需要先将其转换为可能会被散列的东西。如果您希望用作键的字典仅包含不可变值,您可以像这样创建它的可散列表示:
key = frozenset(dict_key.items())"
我有以下查询:
1)我已经尝试在上面的代码中使用它,但我不确定我是否正确使用了它。
2) 要将数据放入 cloudant 数据库中,我使用的是 Python 模块“请求”。在代码中,我使用以下行将数据放入数据库:
req = requests.put(post_url, auth=auth,headers=headers, data=json.dumps(doc))
但我得到以下错误:
“原因”:“只允许 GET、HEAD、POST”
我也对此进行了搜索,并找到了关于它的 IBM BLuemix 文档,如下所示
https://console.ng.bluemix.net/docs/services/Cloudant/basics/index.html#cloudant-basics
正如我提到的文件,我可以说我使用了正确的选项。但可能是我错了。