/ / Verificare se il documento esiste utilizzando cloudant-2.0.0b2 in IBM bluemix e python-python-2.7, ibm-cloud, cloudant

Verifica se il documento esiste utilizzando cloudant-2.0.0b2 in IBM bluemix e python-python-2.7, ibm-cloud, cloudant

Sto usando:

  • Un'applicazione python in bluemix
  • Bluemix cloudant v2.0.0b2 database collegato all'app python

Secondo https://pypi.python.org/pypi/cloudant/2.0.0b2, tutto è passato da 0,5 a 2,0, e stanno ancora lavorando alla documentazione poiché tutto è Beta. Accanto a questo, sono anche nuovo di Python e dei database. La documentazione può essere trovata qui: http://python-cloudant.readthedocs.io/en/latest/getting_started.html

Quello che sto cercando di fare è controllare se un documento esiste già.

Cose che ho provato:

   from cloudant.account import Cloudant
import time
import json
# Connect to the database
client = Cloudant(*hidden*)
client.connect()
# The database we work in
db = client["myDatabase"]
# The document we work on
doc = db["myDocument"]
print doc.exists()

Ma il codice fallisce prima di recuperare il documento. Ho controllato il codice sorgente e sembra che dovrebbe:

  def __getitem__(self, key):
if key in list(self.keys()):
return super(CouchDatabase, self).__getitem__(key)
if key.startswith("_design/"):
doc = DesignDocument(self, key)
else:
doc = Document(self, key)
if doc.exists():
doc.fetch()
super(CouchDatabase, self).__setitem__(key, doc)
return doc
else:
raise KeyError(key)

Fonte: https://pypi.python.org/pypi/cloudant/2.0.0b2

C'è un modo per verificare se il documento esiste prima di recuperarlo? O dovrei recuperarlo e rilevare l'errore? O c'è un approccio diverso?

Qualsiasi aiuto è apprezzato!

risposte:

2 per risposta № 1

Il comportamento che stai descrivendo è il desideratocomportamento per l'oggetto del database delle librerie python-cloudant, quindi se si intende utilizzare l'oggetto del database per recuperare i documenti e popolare la cache del database locale, si dovrebbe cercare except un KeyError in caso di inesistentedocumentare e gestire di conseguenza. Tuttavia, se sei interessato a catturare se un documento esiste prima di portarlo nella cache del tuo database locale, allora cambia il tuo codice in qualcosa di simile:

from cloudant.account import Cloudant
from cloudant.document import Document

# Connect to the database
client = Cloudant(*hidden*)
client.connect()
# The database we work in
db = client["myDatabase"]
# The document we work on
if Document(db, "myDocument").exists():
doc = db["myDocument"]

farebbe il trucco

Allo stesso modo potresti semplicemente fare:

from cloudant.account import Cloudant
from cloudant.document import Document

# Connect to the database
client = Cloudant(*hidden*)
client.connect()
# The database we work in
db = client["myDatabase"]
# The document we work on
doc = Document(db, "myDocument")
if doc.exists():
doc.fetch()

Ma questo non popolerebbe la cache del database locale, il db dizionario.