Поделиться через


Управление базой данных MongoDB с помощью Python

Область применения: MongoDB

Сервер MongoDB в Azure Cosmos DB доступен из общих пакетов Python для MongoDB, таких как:

  • PyMongo для синхронных приложений Python и используемых в этой статье.
  • Двигатель для асинхронных приложений Python.

Примечание.

Пример фрагментов кода доступен на сайте GitHub в качестве проекта Python.

Имя базы данных

В Azure Cosmos DB база данных аналогична пространству имен. При создании базы данных ее имя формирует сегмент URI, используемого для доступа к ресурсу базы данных и любым дочерним ресурсам.

Ниже приведены краткие правила присвоения имен базам данных.

После создания URI базы данных имеет следующий формат:

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

Получение экземпляра базы данных

База данных содержит коллекции и их документы. Чтобы получить доступ к базе данных, используйте доступ к стилю атрибутов или доступ к стилю словаря MongoClient. Дополнительные сведения см. в статье "Получение базы данных".

В следующих фрагментах кода предполагается, что вы уже создали клиентское подключение и закрыли клиентское подключение после этих фрагментов кода.

Получение сведений о сервере

Доступ к данным сервера с помощью метода server_info класса MongoClient. Чтобы получить эти сведения, вам не нужно указывать имя базы данных. Возвращаемые сведения относятся к MongoDB и не представляют саму платформу Azure Cosmos DB.

Вы также можете перечислить базы данных с помощью метода MongoClient.list_database_names и выполнить команду MongoDB для базы данных с помощью метода 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))

В приведенном выше фрагменте кода отображаются выходные данные, аналогичные следующему примеру выходных данных консоли:

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

Существует ли база данных?

Драйвер PyMongo для Python создает базу данных, если она не существует при доступе к ней. Однако вместо этого рекомендуется использовать команды расширения MongoDB для управления данными, хранящимися в API Azure Cosmos DB для MongoDB. Чтобы создать новую базу данных, если она не существует, используйте расширение базы данных create, как показано в следующем фрагменте кода.

Чтобы узнать, существует ли база данных перед его использованием, получите список текущих баз данных с помощью метода 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))

В приведенном выше фрагменте кода отображаются выходные данные, аналогичные следующему примеру выходных данных консоли:

Database exists: adventureworks

Получение списка баз данных, коллекций и количества документов

При программном управлении сервером MongoDB полезно знать, какие базы данных и коллекции находятся на сервере, а также сколько документов находится в каждой коллекции. Дополнительные сведения см. в разделе:

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

В приведенном выше фрагменте кода отображаются выходные данные, аналогичные следующему примеру выходных данных консоли:

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

Получение экземпляра объекта базы данных

Если база данных не существует, драйвер PyMongo для Python создает его при доступе к нему. Однако вместо этого рекомендуется использовать команды расширения MongoDB для управления данными, хранящимися в API Azure Cosmos DB для MongoDB. Шаблон показан выше в разделе "Существует ли база данных?".

При работе с PyMongo вы обращаетесь к базам данных с помощью доступа к стилю атрибутов в экземплярах MongoClient. После создания экземпляра базы данных можно использовать операции уровня базы данных, как показано ниже.

collections = client[db].list_collection_names()

Общие сведения о работе с базами данных с помощью драйвера PyMongo см. в разделе "Операции уровня базы данных".

Удаление базы данных

База данных удаляется с сервера с помощью метода 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))

В приведенном выше фрагменте кода отображаются выходные данные, аналогичные следующему примеру выходных данных консоли:

Enter database name to drop: adventureworks
Dropping database: adventureworks

См. также