Python cqlengine连接集_session()不处理不同的键空间

Python cqlengine连接集_session()不处理不同的键空间,python,cassandra,cqlengine,Python,Cassandra,Cqlengine,我有以下代码 from cassandra.cqlengine import connection #inside a flask function session = get_session_for_keyspace(keyspace) connection.set_session(session) object_list = ModelTable.objects.filter(....) 但是,尽管会话“指向”以更正键空间,但ModelTable中过滤器执行的选择使用了以前几行定义的

我有以下代码

from cassandra.cqlengine import connection


#inside a flask function
session = get_session_for_keyspace(keyspace)
connection.set_session(session)

object_list = ModelTable.objects.filter(....)

但是,尽管会话“指向”以更正键空间,但ModelTable中过滤器执行的选择使用了以前几行定义的旧键值。如何使模型使用每次为连接设置的会话?

Apostolos,它正在使用您的会话,但是默认键空间是在第一次调用set_会话方法时设置的。请看cqlengine连接类中的代码。我猜您的模型没有定义键空间,因此使用默认键空间

如果您在不同的键空间中使用不同的模型,并且只是尝试切换连接类。您可以在模型中定义一个默认键空间,在这种特定情况下也可以使用

您的模型需要在类级别重写此值。


在多个cassandra键空间中使用相同的模型与cqlengine当前的实现方式有点冲突。我建议您查看下拉到基本驱动程序,如果可能的话,在这种情况下使用它。

但不是每个查询都使用connection类中的execute方法执行;并且没有使用会话执行;每个会话都使用自己的键连接。。。还是我误解了这一点;我意识到这有点混乱,但这是对象映射器的本质。您描述的是基本驱动程序的行为方式。另一方面,CQLENGINE会混淆底层查询。它使用模型提供的值构造这些查询。模型中的键空间字段用于确定各种查询的列族。您可以看到它在这里被使用,该属性直接从模型中提取。请花些时间浏览代码。这些“详细信息”应该在文档中!如果没有设置对象的键空间,那么从connection类中的会话中获取键空间会更容易,从而拥有更灵活的对象