如何使用我的原始密钥从Python客户端识别Cloudant数据库中的文档?

时间:2017-09-29 02:59:55

标签: python cloudant

我正在为Cloundant开发一个python客户端程序。 我想要检索一个不是基于“_id”的文档,而是基于我自己的领域。 但是,它不起作用导致密钥错误。任何有助于解决此错误的帮助都非常感谢!

这是我的代码:

jhipster:client --auth=jwt

这个原因

from cloudant.client import Cloudant
from cloudant.error import CloudantException
from cloudant.result import Result,ResultByKey
...
client.connect()
databaseName = "mydata1"
myDatabase = client[databaseName]

# As direct access like  'doc = myDatabase[<_id>]'  cannot work for my key, 
# let's check on by one ... 
for document in myDatabase:
#    if document['_id']== "20170928chibikasmall":  <=  if I use _id it's ok
    if document['gokigenField']== 111:

事先,我使用仪表板创建了gokigenField索引,然后通过我的邮递员用REST API确认结果

KeyError :'gokigenField'

结果如下:

GET https://....bluemix.cloudant.com/mydata1/_index

另外,我已经确认我可以在cloudant仪表板和POST查询中很好地使用这个gokigenField作为查询索引。

我新创建的“gokigenField”未包含在DB中的所有文档中,因为没有该字段会自动创建doc(“_ design / xxx)”。 我想这可能会导致KeyError,当我从我的Python客户端调用它时。

我无法在引用中找到Cloudant API来检查'文档中是否存在特定密钥'。所以,不知道如何绕过这样的文档......

1 个答案:

答案 0 :(得分:1)

这是如何从Python客户端索引查询数据。假设我们已经导入了库并且在myDatabase中有一个数据库客户端。

首先,我创建了一些数据:

#create some data
data = { 'name': 'Julia', 'age': 30, 'pets': ['cat', 'dog', 'frog'], 'gokigenField': 'a' }
myDatabase.create_document(data)
data = { 'name': 'Fred', 'age': 30, 'pets': ['dog'], 'gokigenField': 'b' }
myDatabase.create_document(data)
data = { 'name': 'Laura', 'age': 31, 'pets': ['cat'], 'gokigenField': 'c' }
myDatabase.create_document(data)
data = { 'name': 'Emma', 'age': 32, 'pets': ['cat', 'parrot', 'hamster'], 'gokigenField': 'c' }
myDatabase.create_document(data)

我们可以检查Cloudant仪表板中的数据或执行以下操作:

# check the data is there
for document in myDatabase:
    print(document)

接下来,我们可以选择索引字段gokigenField,如下所示:

# create an index on the field 'gokigenField'
mydb.create_query_index(fields=['gokigenField'])

然后我们可以查询数据库:

# do a query
selector = {'gokigenField': {'$eq': 'c'}}
docs = mydb.get_query_result(selector)
for doc in docs:
    print (doc)

输出两个匹配的文件。

The python-cloudant documentation is here