使用 Python 管理 MongoDB 資料庫
適用於: MongoDB
Azure Cosmos DB 中的 MongoDB 伺服器可以從適用於 MongoDB 的常見 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