Azure DocumentDB ile Python konsol uygulaması oluşturma

Bu kılavuz, Azure DocumentDB kümesine bağlanmak için bir Python konsol uygulaması oluşturma işleminde size yol gösterir. Geliştirme ortamınızı yapılandırıyor, Python için Azure SDK'sından paketi kullanarak azure.identity kimlik doğrulaması yapıyor ve belge oluşturma, sorgulama ve güncelleştirme gibi işlemler gerçekleştirebilirsiniz.

Prerequisites

  • Mevcut bir Azure DocumentDB kümesi

Konsol uygulamanızı yapılandırma

Ardından, yeni bir konsol uygulaması projesi oluşturun ve kümenizde kimlik doğrulaması yapmak için gerekli kitaplıkları içeri aktarın.

  1. Projeniz için yeni bir dizin oluşturun ve bir sanal ortam ayarlayın.

    mkdir mongodb-app
    cd mongodb-app
    python -m venv .venv
    
  2. Sanal ortamı etkinleştirin.

    # On Windows
    .venv\Scripts\activate
    
    # On macOS/Linux
    source .venv/bin/activate
    
  3. Uygulamanız için yeni bir Python dosyası oluşturun.

    touch app.py
    
  4. Azure kimlik doğrulaması kitaplığını azure.identity yükleyin.

    pip install azure.identity
    
  5. pymongo Python sürücüsünü yükleyin.

    pip install pymongo
    

Kümeye bağlanma

Şimdi kitaplığını Azure.IdentityTokenCredential kullanarak kümenize bağlanmak için bir kullanın. Resmi MongoDB sürücüsünün, kümeye bağlanırken kullanılmak üzere Microsoft Entra'dan belirteçleri almak için uygulanması gereken özel bir arabirimi vardır.

  1. Python dosyanızın en üstündeki gerekli modülleri içeri aktarın.

    from azure.identity import DefaultAzureCredential
    from pymongo import MongoClient
    from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult
    
  2. MongoDB OpenID Connect (OIDC) geri çağırma arabirimini uygulayan özel bir sınıf oluşturun.

    class AzureIdentityTokenCallback(OIDCCallback):
        def __init__(self, credential):
            self.credential = credential
    
        def fetch(self, context: OIDCCallbackContext) -> OIDCCallbackResult:
            token = self.credential.get_token(
                "https://ossrdbms-aad.database.windows.net/.default").token
            return OIDCCallbackResult(access_token=token)
    
  3. Küme adı değişkeninizi ayarlayın.

    clusterName = "<azure-documentdb-cluster-name>"
    
  4. DefaultAzureCredential örneğini oluşturun ve kimlik doğrulama özelliklerini ayarlayın.

    credential = DefaultAzureCredential()
    authProperties = {"OIDC_CALLBACK": AzureIdentityTokenCallback(credential)}
    
  5. Microsoft Entra kimlik doğrulaması ile yapılandırılmış bir MongoDB istemcisi oluşturun.

    client = MongoClient(
        f"mongodb+srv://{clusterName}.global.mongocluster.cosmos.azure.com/",
        connectTimeoutMS=120000,
        tls=True,
        retryWrites=True,
        authMechanism="MONGODB-OIDC",
        authMechanismProperties=authProperties
    )
    
    print("Client created")
    

Yaygın işlemler gerçekleştirme

Son olarak veritabanları, koleksiyonlar ve belgelerle ortak görevleri gerçekleştirmek için resmi kitaplığı kullanın. Burada, koleksiyonlarınızı ve öğelerinizi yönetmek için MongoDB veya DocumentDB ile etkileşimde bulunurken kullandığınız sınıfları ve yöntemleri kullanırsınız.

  1. Veritabanınıza bir referans alın.

    database = client.get_database("<database-name>")
    
    print("Database pointer created")
    
  2. Koleksiyonunuza bir referans alın.

    collection = database.get_collection("<container-name>")
    
    print("Collection pointer created")
    
  3. Bir belge oluşturun ve ilecollection.update_onekoleksiyona ekleyin.

    new_document = {
        "_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        "category": "gear-surf-surfboards",
        "name": "Yamba Surfboard",
        "quantity": 12,
        "price": 850.00,
        "clearance": False,
    }
    
    filter = {
        "_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    }
    payload = {
        "$set": new_document
    }
    result = collection.update_one(filter, payload, upsert=True)
    
  4. Koleksiyondan belirli bir belgeyi almak için kullanın collection.find_one .

    filter = {
        "_id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        "category": "gear-surf-surfboards"
    }
    existing_document = collection.find_one(filter)
    print(f"Read document _id:\t{existing_document['_id']}")
    
  5. Filtreyle collection.find eşleşen birden çok belgeyi sorgula.

    filter = {
        "category": "gear-surf-surfboards"
    }
    matched_documents = collection.find(filter)
    
    for document in matched_documents:
        print(f"Found document:\t{document}")