我有两个cassandra集群,我的简单脚本试图从一个读取并写入另一个。根据文档here,我对第二个集群有一个registered_connection
(已命名),并且与第一个集群有一个默认连接。我可以使用以下方法查询不同的集群:
item = MyModel.filter(u_id=u_id).using(keyspace=KEYSPACE,connection=connection).first()
但是,当我尝试使用以下方法将项目写入/保存到另一个群集时
item.using(connection=connection).save()
它不会抛出任何错误,但也不会写入群集。我通过查询接收器集群来验证这一点。我错过了文档中显而易见的内容吗?
PS:在第一个场景中,它是应用自定义连接的ModelQuerySet
对象,在保存场景中是Model
对象。
答案 0 :(得分:0)
对于遇到同样问题并需要解决方案的人。 请记住这是一个解决方法,所以如果在这里弹出一个正确的解决方案,请遵循这一点。
此解决方案基于假设:
关于您的问题的背景:
当您使用具有不同连接的ModelSetQuery
对象时,它会显示预期的行为。所以如果你有一个像这样的查询:
MyModel.filter(u_id=u_id).first()
您可以使用keyspace
方法为此类查询轻松指定connection
和using
:
MyModel.filter(u_id=u_id).using(keyspace=KEYSPACE, connection=connection).first()
您会发现MyModel.using(connection=connection).save()
不起作用。
对于批判性的:
您会发现_execute_statement
中的cassandra.cqlengine.query
方法下方的connection
变量为None
,即使您使用Model.__connection__
设置model._get_connection()
}不会获取您的连接名称字符串。只是一个提示,让你开始看看实际的问题。
解决方法解决方案:将每个群集上的操作分组在一起,并在每个群集操作切换默认连接到connection.set_default_connection("cluster_connection_name")
基本上是这样的:
connection.set_default_connection("cluster1")
# operations and queries on cluster 1
....
connection.set_default_connection("cluster2")
# operations and queries on cluster 2
....
希望这有帮助!