2017-06-26 2 views
0

Ich verwende CosmosDB (Azure DocumentDB) in meinem Projekt, geschrieben in Python 3.CosmosDB und Python3: wie abzufragen?

Ich habe schon eine Weile gesucht, aber ich kann nicht herausfinden, wie man meine Tabelle abfragt. Ich habe einen Beispielcode gesehen, aber ich sehe kein Beispiel für die Abfrage. Alles, was ich tun kann, ist alle Dokumente zu bekommen (nicht ideal, wenn meine DB> 80GB ist).

Die GitHub Repo zeigt eine sehr kleine Gruppe von Operationen für Datenbank und Sammlungen: https://github.com/Azure/azure-documentdb-python/blob/master/samples/CollectionManagement/Program.py

Und der following SO Beitrag zeigt, wie alle Dokumente lesen ... aber nicht, wie als „WHERE = X Abfrage so auszuführen; "

Ich würde es wirklich schätzen, wenn mir jemand in die richtige Richtung zeigen könnte, und möglicherweise ein Beispiel, das zeigt, wie man Abfragen ausführt.

Antwort

1

Basierend auf meinem Verständnis, ich denke, dass Sie wissen möchten, wie Sie eine SQL-ähnliche Abfrage mit Python zum Abrufen von Dokumenten auf Azure CosmosDB von DocumentDB API ausführen, finden Sie im folgenden Code von here.

Eine Abfrage wird durchgeführt unter Verwendung von SQL

# Query them in SQL 
query = { 'query': 'SELECT * FROM server s' }  

options = {} 
options['enableCrossPartitionQuery'] = True 
options['maxItemCount'] = 2 

result_iterable = client.QueryDocuments(collection['_self'], query, options) 
results = list(result_iterable); 

print(results) 

Der obige Code wird unter Verwendung der Methode QueryDocuments.

Jede Sorge, bitte zögern Sie nicht, lassen Sie es mich wissen.


Update: Kombinieren Sie mit meinem Beispielcode für den anderen SO-Thread, den Sie verknüpft haben, wie unten.

from pydocumentdb import document_client 

uri = 'https://ronyazrak.documents.azure.com:443/' 
key = '<your-primary-key>' 

client = document_client.DocumentClient(uri, {'masterKey': key}) 

db_id = 'test1' 
db_query = "select * from r where r.id = '{0}'".format(db_id) 
db = list(client.QueryDatabases(db_query))[0] 
db_link = db['_self'] 

coll_id = 'test1' 
coll_query = "select * from r where r.id = '{0}'".format(coll_id) 
coll = list(client.QueryCollections(db_link, coll_query))[0] 
coll_link = coll['_self'] 

query = { 'query': 'SELECT * FROM server s' }  
docs = client.QueryDocuments(coll_link, query) 
print list(docs) 
+0

Danke, können Sie bitte "Sammlung" für die Vollständigkeit definieren? Ich habe eine bestehende Sammlung, ich erstelle keine. – pookie

+0

@pookie Bitte sehen Sie mein Update, es kombiniert mit meinem Beispielcode für den anderen SO Thread, den Sie verknüpft haben. Willst du es? –

+0

Danke, dies funktionierte mit einigen Änderungen: Sie müssen die 'Optionen' in den' QueryDocuments' Aufruf einfügen, 'print' in Python3 ändern,' list' funktioniert nicht (verursacht, dass das Programm hängt). Ich stattdessen verwendet: Einschränkung = 'etwas' query = "SELECT * FROM WHERE r r = '{0}'." -Format (Constraint) docs = client.QueryDocuments (coll_link, Abfrage-Optionen) . für doc in docs: drucken (doc) Ich konnte deine Antwort nicht bearbeiten, da sie mir immer wieder mitteilte, dass Code nicht korrekt formatiert war (es war eine Lüge!) – pookie