Compartilhar via


Gerenciar um banco de dados MongoDB usando o Python

APLICA-SE AO: MongoDB

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

  • PyMongo para aplicativos Python síncronos e usado neste artigo.
  • Motor para aplicativos Python assíncronos.

Observação

Os exemplos de snippets de código 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 todos os recursos filho.

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

Depois de criado, o URI de um banco de dados estará nesse formato:

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

Obter instância de banco de dados

O banco de dados contém as coleções e os respectivos documentos. Para acessar um banco de dados, use o acesso ao estilo de atributo ou o acesso ao estilo de dicionário do MongoClient. Para obter mais informações, confira Como obter um banco de dados.

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

Obter informações do servidor

Acesse informações do servidor com o método server_info da classe MongoClient. Você não precisa especificar o nome do banco de dados para obter essas informações. As informações retornadas são específicas para o MongoDB e não representam a plataforma do 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 snippet de código anterior exibe uma saída semelhante à seguinte saída de console de exemplo:

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

O banco de dados existe?

Se um banco de dados não existir e você tentar acessá-lo, ele será criado pelo driver PyMongo para Python. No entanto, recomendamos que você use os comandos de extensão do MongoDB para gerenciar dados armazenados na API do Azure Cosmos DB para MongoDB. Para criar um banco de dados se ele não existir, use a extensão criar banco de dados, conforme mostrado no snippet 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 snippet de código anterior exibe uma saída semelhante à seguinte saída de console de exemplo:

Database exists: adventureworks

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

Quando você gerencia o servidor MongoDB programaticamente, é útil saber quais bancos de dados e coleções estão no servidor e quantos documentos existem 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 snippet de código anterior exibe uma saída semelhante à seguinte saída de console de exemplo:

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 e você tentar acessá-lo, ele será criado pelo driver PyMongo para Python. No entanto, recomendamos que 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 no estilo de atributo em instâncias do MongoClient. Depois de ter uma instância de banco de dados, você poderá usar operações no nível do banco de dados, conforme mostrado abaixo.

collections = client[db].list_collection_names()

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

Remover 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 snippet de código anterior exibe uma saída semelhante à seguinte saída de console de exemplo:

Enter database name to drop: adventureworks
Dropping database: adventureworks

Confira também