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 № 1Il 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.