Partilhar via


Gerenciar um banco de dados MongoDB usando Python

APLICA-SE A: MongoDB

Seu servidor MongoDB no Azure Cosmos DB está disponível nos pacotes Python comuns para MongoDB, como:

  • PyMongo para aplicações Python síncronas e usado neste artigo.
  • Motor para aplicações Python assíncronas.

Nota

Os trechos de código de exemplo estão disponíveis no GitHub como um projeto Python.

Nomear um banco de dados

No Azure Cosmos DB, um banco de dados é análogo a um namespace. Quando você cria um banco de dados, o nome do banco de dados forma um segmento do URI usado para acessar o recurso de banco de dados e quaisquer recursos filho.

Aqui estão algumas regras rápidas ao nomear um banco de dados:

Uma vez criado, o URI de um banco de dados está neste formato:

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

Obter instância de banco de dados

A base de dados contém as coleções e os seus documentos. Para acessar um banco de dados, use o acesso de estilo de atributo ou o acesso de estilo de dicionário do MongoClient. Para obter mais informações, consulte Obtendo um banco de dados.

Os trechos de código a seguir pressupõem que você já criou sua conexão de cliente e que fecha sua conexão de cliente após esses trechos de código.

Obter informações do servidor

Acesse as informações do servidor com o método server_info da classe MongoClient. Não é necessário especificar o nome do banco de dados para obter essas informações. As informações retornadas são específicas do MongoDB e não representam a plataforma Azure Cosmos DB em si.

Você também pode listar bancos de dados usando o método MongoClient.list_database_names e emitir um comando MongoDB para um banco de dados com o método 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))

O trecho de código anterior exibe uma saída semelhante à saída do console de exemplo a seguir:

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

Existe base de dados?

O driver PyMongo para Python cria um banco de dados se ele não existir quando você acessá-lo. No entanto, recomendamos que, em vez disso, você use os comandos de extensão do MongoDB para gerenciar dados armazenados na API do Azure Cosmos DB para MongoDB. Para criar um novo banco de dados se ele não existir, use a extensão create database conforme mostrado no trecho de código a seguir.

Para ver se o banco de dados já existe antes de usá-lo, obtenha a lista de bancos de dados atuais com o método 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))

O trecho de código anterior exibe uma saída semelhante à saída do console de exemplo a seguir:

Database exists: adventureworks

Obter lista de bancos de dados, coleções e contagem de documentos

Quando você gerencia seu servidor MongoDB programaticamente, é útil saber quais bancos de dados e coleções estão no servidor e quantos documentos em cada coleção. Para obter mais informações, consulte:

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

O trecho de código anterior exibe uma saída semelhante à saída do console de exemplo a seguir:

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

Obter instância de objeto de banco de dados

Se um banco de dados não existir, o driver PyMongo para Python o criará quando você acessá-lo. No entanto, recomendamos que, em vez disso, você use os comandos de extensão do MongoDB para gerenciar dados armazenados na API do Azure Cosmos DB para MongoDB. O padrão é mostrado acima na seção O banco de dados existe?.

Ao trabalhar com o PyMongo, você acessa bancos de dados usando o acesso de estilo de atributo em instâncias do MongoClient. Depois de ter uma instância de banco de dados, você pode usar operações no nível de banco de dados, conforme mostrado abaixo.

collections = client[db].list_collection_names()

Para obter uma visão geral do trabalho com bancos de dados usando o driver PyMongo, consulte Operações no nível do banco de dados.

Soltar um banco de dados

Um banco de dados é removido do servidor usando o método drop_database do 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))

O trecho de código anterior exibe uma saída semelhante à saída do console de exemplo a seguir:

Enter database name to drop: adventureworks
Dropping database: adventureworks

Consulte também