如何使用Cassandra API将Python的cosmos_client连接到Cosmos数据库实例?

时间:2019-07-16 22:16:00

标签: python cassandra azure-cosmosdb azure-cosmosdb-cassandra-api

我已经设置了一个Cosmos DB(Cassandra API)实例,我想通过Python应用程序管理它的吞吐量。我可以使用Azure中列出的cassandra终结点和主密码创建azure.cosmos.cosmos_client,而不会出现错误,但是所有与该客户端的尝试交互都会导致“ azure.cosmos.errors.HTTPFailure:状态码:404”。我已经可以通过Python中的cassandra-driver与该数据库成功进行交互,但是我需要访问cosmos-client来管理吞吐量。

创建cosmos_client需要有效的URI,其中包含架构(https / http / ftp等...)。在azure上列出的已成功用于通过cqlsh进行连接的端点以及Python cassandra-driver未指定架构。 我在提供的端点的开头添加了“ https://”,并且能够在Python中创建客户端(“ http://”会导致错误,并且即使使用“ https://,经过验证的错误地址也会导致错误。 ”)。 现在,我已经创建了一个客户端对象,我尝试与之进行的任何交互都会给我404错误。

client = cosmos_client.CosmosClient(f'https://{COSMOS_CASSANDRA_ENDPOINT}', {'masterKey': COSMOS_CASSANDRA_PASSWORD} )

client.ReadEndpoint
        #'https://COSMOS_CASSANDRA_ENDPOINT'

client.GetDatabaseAccount(COSMOS_CASSANDRA_ENDPOINT)
        #azure.cosmos.errors.HTTPFailure: Status code: 404

client.ReadDatabase(EXISTING_KEYSPACE_NAME)
        #azure.cosmos.errors.HTTPFailure: Status code: 404

我想知道使用cosmos_client是否是与cosmos实例进行交互以修改Python应用程序的吞吐量的正确方法。如果是这样,我应该如何正确设置cosmos_client。 也许有一种方法可以直接使用cassandra-driver通过数据库修改来做到这一点。

1 个答案:

答案 0 :(得分:0)

尝试使用Python和.NET时无法通过CosmosClient或DocumentClient访问数据库而辛苦了一段时间之后,我唯一可以通过代码设置预配置吞吐量的方法是通过直接通过cassandra-driver执行cql来执行以下操作(在Python中):

from cassandra.cqlengine import connection

connection.setup(<CONNECTION_SETUP_ARGS>)
session = connection.get_session()
session.execute("use <CASSANDRA_NAMESPACE>")
session.execute("alter table <CASSANDRA_TABLE_NAME> with cosmosdb_provisioned_throughput=<DESIRED_THROUGHPUT>")

我想我最初是从here得到这个想法的。

或者,我认为您也许可以通过子进程模块运行命令,以通过Azure CLI与数据库进行交互,但是我尚未测试此技术。如果您可以这样做,它将为通过代码执行各种数据库管理交互提供一种方法。我会尝试的。