共用方式為


使用 Python 管理 MongoDB 資料庫

適用於: MongoDB

Azure Cosmos DB 中的 MongoDB 伺服器可以從適用於 MongoDB 的常見 Python 套件取得,例如:

  • PyMongo (英文),適用於同步 Python 應用程式,且於此文章中使用。
  • Motor (英文),適用於非同步 Python 應用程式。

注意

範例程式碼片段 可在 GitHub 上作為 Python 專案取得。

命名資料庫

在 Azure Cosmos DB 中,資料庫類似於命名空間。 當您建立資料庫時,資料庫名稱會成為存取資料庫資源和任何子資源的 URI 區段。

以下是命名資料庫時的一些快速規則:

建立之後,資料庫的 URI 格式如下:

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

取得資料庫執行個體

資料庫會保存集合及其文件。 若要存取資料庫,請使用 MongoClient 的屬性樣式存取或字典樣式存取。 如需詳細資訊,請參閱取得資料庫 (英文)。

下列程式碼片段假設您已建立用戶端連線,而且您已在這些程式碼片段之後關閉用戶端連線

取得伺服器資訊

使用 MongoClient 類別的 server_info (英文) 方法存取伺服器資訊。 您不需要指定資料庫名稱來取得此資訊。 傳回的資訊專屬於 MongoDB,且不代表 Azure Cosmos DB 平台本身。

您也可以使用 MongoClient.list_database_names (英文) 方法列出資料庫,並使用 MongoClient.db.command (英文) 方法對資料庫發出 MongoDB 命令 (英文)。

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

資料庫是否存在?

適用於 Python 的 PyMongo 驅動程式會在您存取時建立資料庫 (如果不存在資料庫的話)。 不過,建議您改為使用 MongoDB 延伸模組命令來管理儲存在 Azure Cosmos DB 的 API for MongoDB 中的資料。 若要建立不存在的新資料庫,請使用建立資料庫延伸模組,如下列程式碼片段所示。

若要在使用資料庫之前查看資料庫是否已經存在,請使用 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

取得資料庫物件執行個體

如果資料庫不存在,適用於 Python 的 PyMongo 驅動程式會在您加以存取時建立資料庫。 不過,建議您改為使用 MongoDB 延伸模組命令來管理儲存在 Azure Cosmos DB 的 API for MongoDB 中的資料。 此模式已顯示於上面的資料庫是否存在?小節中。

使用 PyMongo 時,您可以在 MongoClient 執行個體上使用屬性樣式存取來存取資料庫。 擁有資料庫執行個體之後,您便可以使用資料庫層級作業,如下所示。

collections = client[db].list_collection_names()

如需使用 PyMongo 驅動程式處理資料庫的概觀,請參閱資料庫層級作業 (英文)。

卸除資料庫

會使用 MongoClient 的 drop_database (英文) 方法從伺服器中移除資料庫。

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

另請參閱