1

私はcassandra-driver 2.5.0(およびcqlengineモデル)でpython 3.4.0のcassandraを使用しています。

アプリ データは、管理用の 1 つのキースペースとユーザーごとに 1 つのキースペースに分散されます。master+custom の 2 つのキースペースを照会する必要があります。

次のように使用されるキースペース切り替え用の小さなクラスをコーディングしました。

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安全ですか?

ありがとう

4

1 に答える 1

2

質問は古いです。これが他の誰かに役立つことを願っています。

はい、2番目のアプローチは正しいです。が設定されているかどうかをチェックし、設定されていない場合にのみ新しいキースペースを設定するため、効果get_session()はありません。したがって、キースペースを効果的に変更するには、変更する必要がありますset_session()models.DEFAULT_KEYSPACEmodels.DEFAULT_KEYSPACE

于 2015-07-24T11:32:07.747 に答える