開始使用適用於 Python 的 Azure Cosmos DB for Apache Cassandra 用戶端程式庫,以儲存、管理和查詢非結構化資料。 請依照本指南中的步驟建立新帳戶、安裝 Python 用戶端程式庫、連線到帳戶、執行一般作業,以及查詢最終範例資料。
先決條件
Azure 訂用帳戶
- 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。
Azure Cloud Shell 中最新版的 Azure CLI。
- 如果您想要在本機執行 CLI 參考命令,請使用
az login命令登入 Azure CLI。
- 如果您想要在本機執行 CLI 參考命令,請使用
- Python 3.12 或更新版本
設定
首先,設定本指南的帳號和開發環境。 本節將引導您進行創建帳戶、獲取其憑證,然後準備開發環境。
建立帳戶
首先,建立適用於 Apache Cassandra 帳戶的 API。 建立帳戶之後,請建立金鑰空間和資料表資源。
如果您還沒有目標資源群組,請使用命令
az group create在訂用帳戶中建立新的資源群組。az group create \ --name "<resource-group-name>" \ --location "<location>"使用
az cosmosdb create命令,新建具有預設設定的 Azure Cosmos DB Apache Cassandra 帳戶。az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableCassandra"使用
az cosmosdb cassandra keyspace create名為cosmicworks建立新的keyspace。az cosmosdb cassandra keyspace create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"建立新的 JSON 物件,以使用多行 Bash 命令來代表您的結構描述。 然後,使用
az cosmosdb cassandra table create命令來建立名為products的新數據表。schemaJson=$(cat <<EOF { "columns": [ { "name": "id", "type": "text" }, { "name": "name", "type": "text" }, { "name": "category", "type": "text" }, { "name": "quantity", "type": "int" }, { "name": "price", "type": "decimal" }, { "name": "clearance", "type": "boolean" } ], "partitionKeys": [ { "name": "id" } ] } EOF )az cosmosdb cassandra table create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --keyspace-name "cosmicworks" \ --name "product" \ --schema "$schemaJson"
取得認證
現在,取得客戶端程式庫所需的密碼,以建立與最近創建的帳戶的連接。
使用
az cosmosdb show來取得帳戶的聯絡點和使用者名稱。az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"記錄先前命令輸出中
contactPoint和username屬性的值。 這些屬性的值是您在本指南稍後用來連線至資料庫帳戶的 聯絡點 和 使用者名稱 。使用
az cosmosdb keys list可獲得帳戶的 金鑰 。az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"記錄先前命令輸出中屬性
primaryMasterKey的值。 此屬性的值是您在本指南稍後用來連線至程式庫帳戶的 密碼 。
準備開發環境
然後,使用新專案和用戶端程式庫來設定您的開發環境。 此步驟是繼續本指南其餘部分之前的最後一個必要先決條件。
從空白目錄開始。
從 Python 套件索引 (PyPI) 匯入
cassandra-driver套件。pip install cassandra-driver建立 app.py 檔案。
物件模型
| 說明 | |
|---|---|
Cluster |
表示叢集的特定連線 |
程式碼範例
驗證用戶端
首先,使用本指南稍早收集的認證來驗證用戶端。
在整合開發環境 (IDE) 中開啟 app.py 檔案。
從模組匯入
cassandra-driver下列型態:cassandra.cluster.Clustercassandra.auth.PlainTextAuthProvider
from cassandra.cluster import Cluster from cassandra.auth import PlainTextAuthProvider從模組匯入
ssl下列型態:ssl.PROTOCOL_TLS_CLIENTssl.SSLContextssl.CERT_NONE
from ssl import PROTOCOL_TLS_CLIENT, SSLContext, CERT_NONE為本指南稍早收集的認證建立字串變數。 將變數
username命名為 、password和contactPoint。username = "<username>" password = "<password>" contactPoint = "<contact-point>"透過建立名為
SSLContext的新變數 ,將通訊協定設定為ssl_context,停用主機名稱檢查,並將驗證模式設定為PROTOCOL_TLS_CLIENT來設定CERT_NONE。ssl_context = SSLContext(PROTOCOL_TLS_CLIENT) ssl_context.check_hostname = False ssl_context.verify_mode = CERT_NONE使用先前步驟中指定的認證建立新的
PlainTextAuthProvider物件。 將結果儲存在名為auth_provider的變數中。auth_provider = PlainTextAuthProvider(username=username, password=password)Cluster使用在先前步驟中建立的認證和組態變數來建立 物件。 將結果儲存在名為cluster的變數中。cluster = Cluster([contactPoint], port=10350, auth_provider=auth_provider, ssl_context=ssl_context)連線至叢集。
session = cluster.connect("cosmicworks")
警告
本指南已停用完整的傳輸層安全性 (TLS) 驗證,以簡化驗證。 針對生產環境部署,請完全啟用驗證。
更新插入資料
接下來,將新資料「更新或插入」到資料表中。 更新插入可確保根據資料表中是否已存在相同的資料,適當地建立或取代資料。
建立以 Cassandra 查詢語言 (CQL) 查詢命名
insertQuery的新字串變數,以插入新資料列。insertQuery = """ INSERT INTO product (id, name, category, quantity, price, clearance) VALUES (%(id)s, %(name)s, %(category)s, %(quantity)s, %(price)s, %(clearance)s) """建立具有新產品各種屬性的新物件,並將其儲存在名為
params的變數中。params = { "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "name": "Yamba Surfboard", "category": "gear-surf-surfboards", "quantity": 12, "price": 850.00, "clearance": False }使用函數
execute來執行具有指定參數的查詢。session.execute(insertQuery, params)
讀取資料
然後,讀取先前更新插入資料表的資料。
建立一個名為 CQL 查詢的新
readQuery字串變數,以匹配具有相同id欄位的項目。readQuery = "SELECT * FROM product WHERE id = %s LIMIT 1"建立一個字串變數,其值
id與本指南稍早建立的產品具有相同的值。id = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"使用
execute函數來執行儲存在readQuery中的查詢,並將id變數作為引數傳入。 將結果儲存在名為readResults的變數中。readResults = session.execute(readQuery, (id,))使用函數
one取得預期的單一結果。 將此單一結果儲存在名為matchedProduct的變數中。matchedProduct = readResults.one()
查詢數據
最後,使用查詢來尋找與表中特定篩選器相符的所有資料。
建立名為
findQuery和category的字串變數,並搭配 CQL 查詢和必要參數。findQuery = "SELECT * FROM product WHERE category = %s ALLOW FILTERING" category = "gear-surf-surfboards"使用兩個字串變數和
execute函數來查詢多個結果。 將此查詢的結果儲存在名為findResults的變數中。findResults = session.execute(findQuery, (category,))使用
for迴圈來逐一查看查詢結果。for row in findResults: # Do something here with each result
執行程式碼
使用應用程式目錄中的終端機執行新建立的應用程式。
python app.py
清理資源
當您不再需要帳戶時,請從 Azure 訂用帳戶中移除帳戶,方法是 刪除 該資源。
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"