Sdílet prostřednictvím


Správa databáze MongoDB pomocí Pythonu

PLATÍ PRO: MongoDB

Váš server MongoDB ve službě Azure Cosmos DB je dostupný z běžných balíčků Pythonu pro MongoDB, například:

  • PyMongo pro synchronní aplikace Pythonu a používané v tomto článku.
  • Motor pro asynchronní aplikace Pythonu

Poznámka:

Ukázkové fragmenty kódu jsou k dispozici na GitHubu jako projekt Pythonu.

Pojmenování databáze

Ve službě Azure Cosmos DB je databáze analogická k oboru názvů. Při vytváření databáze tvoří název databáze segment identifikátoru URI, který se používá pro přístup k databázovému prostředku a všem podřízeným prostředkům.

Tady je několik rychlých pravidel při pojmenování databáze:

Po vytvoření je identifikátor URI databáze v tomto formátu:

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

Získání instance databáze

Databáze obsahuje kolekce a jejich dokumenty. Pro přístup k databázi použijte přístup ke stylu atributu nebo přístup ke stylu slovníku MongoClient. Další informace naleznete v tématu Získání databáze.

Následující fragmenty kódu předpokládají, že jste už vytvořili připojení klienta a po těchto fragmentech kódu zavřete připojení klienta.

Získání informací o serveru

Přístup k informacím o serveru pomocí metody server_info třídy MongoClient. Pro získání těchto informací nemusíte zadávat název databáze. Vrácené informace jsou specifické pro MongoDB a nepředstavují samotnou platformu Azure Cosmos DB.

Databáze můžete také vypsat pomocí metody MongoClient.list_database_names a vydat příkaz MongoDB k databázi pomocí metody 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))

Předchozí fragment kódu zobrazí výstup podobný následujícímu příkladu výstupu konzoly:

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

Existuje databáze?

Ovladač PyMongo pro Python vytvoří databázi, pokud neexistuje, když k ní přistupujete. Doporučujeme ale místo toho použít příkazy rozšíření MongoDB ke správě dat uložených v rozhraní API služby Azure Cosmos DB pro MongoDB. Pokud chcete vytvořit novou databázi, pokud neexistuje, použijte rozšíření pro vytvoření databáze, jak je znázorněno v následujícím fragmentu kódu.

Pokud chcete zjistit, jestli databáze již existuje, než ji použijete, získejte seznam aktuálních databází pomocí metody 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))

Předchozí fragment kódu zobrazí výstup podobný následujícímu příkladu výstupu konzoly:

Database exists: adventureworks

Získání seznamu databází, kolekcí a počtu dokumentů

Při správě serveru MongoDB prostřednictvím kódu programu je užitečné vědět, jaké databáze a kolekce jsou na serveru a kolik dokumentů v každé kolekci je. Další informace naleznete v tématu:

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

Předchozí fragment kódu zobrazí výstup podobný následujícímu příkladu výstupu konzoly:

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

Získání instance databázového objektu

Pokud databáze neexistuje, ovladač PyMongo pro Python ji vytvoří při přístupu. Doporučujeme ale místo toho použít příkazy rozšíření MongoDB ke správě dat uložených v rozhraní API služby Azure Cosmos DB pro MongoDB. Vzor je uvedený výše v části Existuje databáze?.

Při práci s PyMongo přistupujete k databázím pomocí přístupu ke stylu atributů v instancích MongoClient. Jakmile máte instanci databáze, můžete použít operace na úrovni databáze, jak je znázorněno níže.

collections = client[db].list_collection_names()

Přehled práce s databázemi pomocí ovladače PyMongo najdete v tématu Operace na úrovni databáze.

Vyřazení databáze

Databáze se ze serveru odebere pomocí metody 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))

Předchozí fragment kódu zobrazí výstup podobný následujícímu příkladu výstupu konzoly:

Enter database name to drop: adventureworks
Dropping database: adventureworks

Viz také