对于偶然发现相同问题并需要解决方案的人。请记住,这是一种解决方法,因此如果此处弹出适当的解决方案,请遵循该解决方案。
该解决方案基于以下假设:
- 您正在使用 cassandra-driver==3.11.0 或更低版本,其中支持连接注册表(看这里)
- 您有 2 个或更多集群要处理,并且您已通过上述 API ( register_connection ) 注册了所有命名连接。使连接之一成为默认连接。
关于您的问题的一点背景:
当您使用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()
不起作用。
对于批判性思维:
您将观察到 under_execute_statement
方法 incassandra.cqlengine.query
具有connection
变量 asNone
并且即使您设置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
....
希望这可以帮助!