Megosztás:


Python-konzolalkalmazás létrehozása az Azure DocumentDB-vel

Ez az útmutató végigvezeti egy Python-konzolalkalmazás létrehozásán egy Azure DocumentDB-fürthöz való csatlakozáshoz. Konfigurálhatja a fejlesztői környezetet, hitelesítheti a csomagot a azure.identity Pythonhoz készült Azure SDK-ból, és olyan műveleteket hajthat végre, mint a dokumentumok létrehozása, lekérdezése és frissítése.

Előfeltételek

  • Azure-előfizetés

  • Meglévő Azure DocumentDB-fürt

A konzolalkalmazás konfigurálása

Ezután hozzon létre egy új konzolalkalmazás-projektet, és importálja a fürt hitelesítéséhez szükséges kódtárakat.

  1. Hozzon létre egy új könyvtárat a projekthez, és állítson be egy virtuális környezetet.

    mkdir mongodb-app
    cd mongodb-app
    python -m venv .venv
    
  2. Aktiválja a virtuális környezetet.

    # On Windows
    .venv\Scripts\activate
    
    # On macOS/Linux
    source .venv/bin/activate
    
  3. Hozzon létre egy új Python-fájlt az alkalmazáshoz.

    touch app.py
    
  4. Telepítse az azure.identity Azure-hitelesítés kódtárát.

    pip install azure.identity
    
  5. Telepítse a pymongo Python-illesztőprogramot.

    pip install pymongo
    

Csatlakozzon a klaszterhez

Most használja a Azure.Identity könyvtárat, hogy szerezzen egy TokenCredential-et, amelyet a fürthöz való csatlakozáshoz használhat. A hivatalos MongoDB-meghajtó egy speciális felülettel rendelkezik, amelyet implementálni kell ahhoz, hogy tokeneket szerezzen be a Microsoft Entra-tól a fürthöz való csatlakozáshoz.

  1. Importálja a szükséges modulokat a Python-fájl tetején.

    from azure.identity import DefaultAzureCredential
    from pymongo import MongoClient
    from pymongo.auth_oidc import OIDCCallback, OIDCCallbackContext, OIDCCallbackResult
    
  2. Hozzon létre egy egyéni osztályt, amely implementálja a MongoDB OpenID Connect (OIDC) visszahívási felületet.

    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. Állítsa be a klaszternév változóját.

    clusterName = "<azure-documentdb-cluster-name>"
    
  4. Hozzon létre egy DefaultAzureCredential példányt, és állítsa be a hitelesítési tulajdonságokat.

    credential = DefaultAzureCredential()
    authProperties = {"OIDC_CALLBACK": AzureIdentityTokenCallback(credential)}
    
  5. Hozzon létre egy Microsoft Entra-hitelesítéssel konfigurált MongoDB-ügyfelet.

    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")
    

Gyakori műveletek végrehajtása

Végül használja a hivatalos könyvtárat az adatbázisok, gyűjtemények és dokumentumok gyakori feladatainak elvégzéséhez. Itt ugyanazokat az osztályokat és metódusokat használja, amelyekkel a MongoDB-vel vagy a DocumentDB-vel kezelheti gyűjteményeit és elemeit.

  1. Az adatbázisra mutató hivatkozás lekérése.

    database = client.get_database("<database-name>")
    
    print("Database pointer created")
    
  2. A gyűjteményre mutató hivatkozás lekérése.

    collection = database.get_collection("<container-name>")
    
    print("Collection pointer created")
    
  3. Hozzon létre egy dokumentumot, és helyezze be a gyűjteménybe a következővel collection.update_one: .

    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. Egy collection.find_one adott dokumentum lekérése a gyűjteményből.

    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. Lekérdezés több dokumentumhoz, amelyek megfelelnek egy szűrőnek collection.find.

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