This might be simple or very niche but I had to spend a lot of time figuring it out so I just wanted to put it up somewhere.
Say you have 3 cassandra clusters C_X, C_Y and C_Z and you have tables T_X1, T_X2, T_Y1, T_Z1 such that
C_X hosts T_X1 and T_X2 C_Y hosts T_Y1 C_Z hosts T_Z1
Now you can create connections to all of these like so
cluster_x = Cluster(C_X) session_x = cluster_x.connect() cluster_y = Cluster(C_Y) session_y = cluster_y.connect() cluster_z = Cluster(C_Z) session_z = cluster_z.connect()
And then you create some named tables ( https://datastax.github.io/python-driver/cqlengine/queryset.html#named-tables )
n_t_x1 = NamedTable(T_X1) n_t_x2 = NamedTable(T_X2) n_t_y1 = NamedTable(T_Y1) n_t_z1 = NamedTable(T_Z1)
but how do you tell cassandra driver which table is hosted on which cluster or which session / connection should it use?
from cassandra.cqlengine import connection as cql_connection cql_connection.register_connection("CONN_X", C_X) n_t_x1.__connection__ = "CONN_X" n_t_x2.__connection__ = "CONN_X" cql_connection.register_connection("CONN_Y", C_Y) n_t_y1.__connection__ = "CONN_Y" cql_connection.register_connection("CONN_Z", C_Z) n_t_z1.__connection__ = "CONN_Z"
now queries to n_t_x1 will be routed to connection with the name “CONN_X” and so on.
PS: it’s kinda hidden the documentation here [driver 3.7.0] https://datastax.github.io/python-driver/cqlengine/connections.html#default-model-connection