Dela via


Hantera en MongoDB-databas med Python

GÄLLER FÖR: MongoDB

MongoDB-servern i Azure Cosmos DB är tillgänglig från de vanliga Python-paketen för MongoDB, till exempel:

  • PyMongo för synkrona Python-program och används i den här artikeln.
  • Motor för asynkrona Python-program.

Kommentar

Exempelkodfragmenten är tillgängliga på GitHub som ett Python-projekt.

Namnge en databas

I Azure Cosmos DB motsvarar en databas ett namnområde. När du skapar en databas utgör databasnamnet ett segment av den URI som används för att komma åt databasresursen och eventuella underordnade resurser.

Här följer några snabbregler när du namnger en databas:

När den har skapats är URI:n för en databas i det här formatet:

https://<cosmos-account-name>.documents.azure.com/dbs/<database-name>

Hämta databasinstans

Databasen innehåller samlingarna och deras dokument. Om du vill komma åt en databas använder du åtkomst till attributformat eller ordlisteformat för MongoClient. Mer information finns i Hämta en databas.

Följande kodfragment förutsätter att du redan har skapat klientanslutningen och att du stänger klientanslutningen efter dessa kodfragment.

Hämta serverinformation

Få åtkomst till serverinformation med metoden server_info i klassen MongoClient. Du behöver inte ange databasnamnet för att hämta den här informationen. Informationen som returneras är specifik för MongoDB och representerar inte själva Azure Cosmos DB-plattformen.

Du kan också lista databaser med hjälp av metoden MongoClient.list_database_names och utfärda ett MongoDB-kommando till en databas med metoden MongoClient.db.command .

# Get server information
for k, v in client.server_info().items():
    print("Key: {} , Value: {}".format(k, v))

# Get server status of admin database
print("Server status {}".format(client.admin.command("serverStatus")))

# List databases
databases = client.list_database_names()
print("Databases: {}".format(databases))

Föregående kodfragment visar utdata som liknar följande exempelkonsolutdata:

Key: version , Value: 3.6.0
Key: versionArray , Value: [3, 6, 0, 0]
Key: bits , Value: 64
Key: maxBsonObjectSize , Value: 16777216
Key: ok , Value: 1.0
Server status {'ok': 1.0}
Databases: ['adventureworks']

Finns databasen?

PyMongo-drivrutinen för Python skapar en databas om den inte finns när du kommer åt den. Vi rekommenderar dock att du i stället använder MongoDB-tilläggskommandona för att hantera data som lagras i Azure Cosmos DB:s API för MongoDB. Om du vill skapa en ny databas om den inte finns använder du tillägget skapa databas enligt följande kodfragment.

Om du vill se om databasen redan finns innan du använder den hämtar du listan över aktuella databaser med metoden list_database_names .

# Get list of databases
databases = client.list_database_names()
if not databases:
    print("No databases found")

# Does database exist?
DB_NAME = "adventureworks"
if DB_NAME in databases:
    print("Database exists: {}".format(DB_NAME))
else:
    client[DB_NAME].command(
        {"customAction": "CreateDatabase", "offerThroughput": 400}
    )
    print("Created db '{}' with shared throughput.\n".format(DB_NAME))

Föregående kodfragment visar utdata som liknar följande exempelkonsolutdata:

Database exists: adventureworks

Hämta lista över databaser, samlingar och antal dokument

När du hanterar MongoDB-servern programmatiskt är det bra att veta vilka databaser och samlingar som finns på servern och hur många dokument som finns i varje samling. Mer information finns i:

# Get list of databases
databases = client.list_database_names()

# Loop through databases
for db in databases:
    print("Database: {}".format(db))

    # Get list of collections
    collections = client[db].list_collection_names()

    # Loop through collections
    for col in collections:
        print("\tCollection: {}".format(col))

        # Get document count
        doc_count = client[db][col].count_documents({})
        print("\tDocument count: {}".format(doc_count))

Föregående kodfragment visar utdata som liknar följande exempelkonsolutdata:

Database: adventureworks
        Collection: products_new
        Document count: 1
        Collection: products
        Document count: 3
Database: testdb
        Collection: mycoll
        Document count: 1

Hämta databasobjektinstans

Om det inte finns någon databas skapar PyMongo-drivrutinen för Python den när du kommer åt den. Vi rekommenderar dock att du i stället använder MongoDB-tilläggskommandona för att hantera data som lagras i Azure Cosmos DB:s API för MongoDB. Mönstret visas ovan i avsnittet Finns databasen?.

När du arbetar med PyMongo får du åtkomst till databaser med attributstilåtkomst på MongoClient-instanser. När du har en databasinstans kan du använda åtgärder på databasnivå enligt nedan.

collections = client[db].list_collection_names()

En översikt över hur du arbetar med databaser med pymongodrivrutinen finns i Åtgärder på databasnivå.

Ta bort en databas

En databas tas bort från servern med hjälp av metoden drop_database mongoClient.

DB_NAME = input("Enter database name to drop: ")
if DB_NAME in client.list_database_names():
    print("Dropping database: {}".format(DB_NAME))
    client.drop_database(DB_NAME)
else:
    print("Didn't find database: {}".format(DB_NAME))

Föregående kodfragment visar utdata som liknar följande exempelkonsolutdata:

Enter database name to drop: adventureworks
Dropping database: adventureworks

Se även