【问题标题】:cqlengine multilpe keyspacescqlengine 多重键空间
【发布时间】:2015-07-24 21:12:56
【问题描述】:

我正在使用 python 3.4.0 中的 cassandra 和 cassandra-driver 2.5.0(和 cqlengine 模型)。

应用数据分布在:一个用于管理的键空间和每个用户一个键空间。我需要查询两个键空间:master+custom。

我编写了一个用于键空间切换的小类,如下所示:

with keyspace(new_keyspace):
    #do stuff with new_keyspace
#do stuff with previous keyspace

我的第一个版本是:

class keyspace(object):

    def __init__(self, new_keyspace):
        self.new_keyspace = new_keyspace
        self.old_keyspace = get_session().keyspace

    def __enter__(self):
        session = get_session()
        session.set_keyspace()
        connection.set_session(session)

    def __exit__(self, type, value, traceback):
        session = get_session()
        session.set_keyspace(self.old_keyspace)
        connection.set_session(session)        

而且根本不起作用。 我已经用以下方式重新编码了课程:

class keyspace(object):

    def __init__(self, new_keyspace):
        self.new_keyspace = new_keyspace
        self.old_keyspace = cassandra.cqlengine.models.DEFAULT_KEYSPACE

    def __enter__(self):
        cassandra.cqlengine.models.DEFAULT_KEYSPACE = self.new_keyspace

    def __exit__(self, type, value, traceback):
        cassandra.cqlengine.models.DEFAULT_KEYSPACE = self.old_keyspace

最后一个代码有效,但我在使用 DEFAULT_KEYSPACE 时感到不安全。

为什么get_session()、set_session没有效果?

cassandra.cqlengine.models.DEFAULT_KEYSPACE 检查这个安全吗?

谢谢

【问题讨论】:

    标签: python cassandra cqlengine


    【解决方案1】:

    这个问题很老,希望这对其他人有帮助。

    是的,第二种方法是正确的。 get_session()set_session() 无效,因为它检查是否设置了 models.DEFAULT_KEYSPACE,如果未设置,则仅设置新的键空间。所以要有效地改变你需要改变的键空间models.DEFAULT_KEYSPACE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2013-09-28
      • 2019-09-07
      • 2014-04-18
      • 2014-03-27
      • 2014-04-01
      • 1970-01-01
      相关资源
      最近更新 更多