Partager via


Gérer une base de données MongoDB en Python

S’APPLIQUE À : MongoDB

Votre serveur MongoDB dans Azure Cosmos DB est disponible parmi les packages Python courants pour MongoDB, par exemple :

  • PyMongo pour les applications Python synchrones, et utilisé dans cet article.
  • Motor pour les applications Python asynchrones.

Remarque

Les exemples d’extraits de code sont disponibles sur GitHub sous forme de projet Python.

Nommer une base de données

Dans Azure Cosmos DB, une base de données est analogue à un espace de noms. Lorsque vous créez une base de données, le nom de la base de données forme un segment de l’URI utilisé pour accéder à la ressource de base de données et à toutes les ressources enfants.

Voici quelques règles rapides lors de l’affectation d’un nom à une base de données :

Une fois créé, l’URI d’une base de données est au format suivant :

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

Obtenir une instance de base de données

La base de données contient les collections et leurs documents. Pour accéder à une base de données, utilisez l’accès de style attribut ou l’accès de style dictionnaire de MongoClient. Pour plus d’informations, consultez Obtention d’une base de données.

Les extraits de code suivants supposent que vous avez déjà créé votre connexion client et que vous fermez votre connexion client après ces extraits de code.

Obtenir les informations du serveur

Accédez aux informations du serveur avec la méthode server_info de la classe MongoClient. Vous n’avez pas besoin de spécifier le nom de la base de données pour obtenir ces informations. Les informations retournées sont spécifiques à MongoDB et ne représentent pas la plateforme Azure Cosmos DB elle-même.

Vous pouvez également lister les bases de données avec la méthode MongoClient.list_database_names, et émettre une commande MongoDB pour une base de données avec la méthode 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))

L’extrait de code précédent affiche une sortie similaire à l’exemple de sortie de console suivant :

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']

La base de données existe-t-elle ?

Le pilote PyMongo pour Python crée une base de données, si elle n’existe pas quand vous y accédez. Toutefois, nous vous recommandons d’utiliser à la place les commandes d’extension MongoDB pour gérer les données stockées dans l’API pour MongoDB d’Azure Cosmos DB. Pour créer une base de données qui n’existe pas déjà, utilisez l’extension de création de base de données, comme indiqué dans l’extrait de code suivant.

Pour voir si la base de données existe déjà avant de l’utiliser, obtenez la liste des bases de données actuelles avec la méthode 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))

L’extrait de code précédent affiche une sortie similaire à l’exemple de sortie de console suivant :

Database exists: adventureworks

Obtenir la liste des bases de données, des collections et le nombre de documents

Lorsque vous gérez votre serveur MongoDB par programmation, il est utile de savoir quelles bases de données et collections sont sur le serveur et le nombre de documents de chaque collection. Pour plus d'informations, consultez les pages suivantes :

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

L’extrait de code précédent affiche une sortie similaire à l’exemple de sortie de console suivant :

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

Obtenir une instance d’objet de base de données

Si la base de données n’existe pas, le pilote PyMongo pour Python la crée quand vous y accédez. Toutefois, nous vous recommandons d’utiliser à la place les commandes d’extension MongoDB pour gérer les données stockées dans l’API pour MongoDB d’Azure Cosmos DB. Le modèle est affiché ci-dessus dans la section La base de données existe-t-elle ?.

Quand vous utilisez PyMongo, vous accédez aux bases de données en utilisant l’accès de style attribut sur les instances de MongoClient. Une fois que vous disposez d’une instance de base de données, vous pouvez utiliser les opérations au niveau de la base de données, comme indiqué ci-dessous.

collections = client[db].list_collection_names()

Pour une vue d’ensemble de l’utilisation des bases de données à l’aide du pilote PyMongo, consultez Opérations au niveau de la base de données.

Déposer une base de données

Une base de données est supprimée du serveur à l’aide de la méthode drop_database de 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))

L’extrait de code précédent affiche une sortie similaire à l’exemple de sortie de console suivant :

Enter database name to drop: adventureworks
Dropping database: adventureworks

Voir aussi