Управление базой данных 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