2016-05-13 15 views
1

オブジェクトマッパーを使用してモデルを宣言し、最初に宣言されているかどうかにかかわらず、キースペースとテーブルを変更する方法はありますか?Cassandraのpythonドライバでモデルのキースペース/テーブルを変更します

ユースケースは以下の通りです:

  • 私はデータベースにあるものの[パイソン]モデルを維持し、実行時に動的にこの定義を生成する必要がないようにしたいです。

  • モデルは複数のテーブル/キースペースに存在するため、これらのキースペース/テーブルでアクセスする必要がありますが、これは実行時にのみ決定され、すべてのキースペース/テーブルに対して同じモデルが使用されます。

+0

私が今までに見つけた解決策は、異なるテーブルとキースペース属性を持つ重複したモデル定義を作成することです。 –

答えて

1

現在、cqlengineはこれを行うための良い方法を提供していません。今のベスト・ベットは、抽象モデルを定義し、__keyspace__属性を設定することでキー空間ごとに1回しか特殊化しないことです。あなたも、キースペース名によって動的にこれらのクラスを生成することがありました:

class Base(Model): 
    __table_name__ = 'my_table' 
    k = Integer(primary_key=True) 
    v = Integer() 

for ks in ('one', 'two', 'three', 'four'): 
    create_keyspace_simple(ks, 1) 
    ks_type = type(ks, (Base,), {'__keyspace__': ks}) 
    sync_table(ks_type) 

これは不自然ですが、キースペースあたりks_typeモデルを生成する方法を示しています。

cqlengineは最終的にこれをモデル化する本質的な方法を持っています。 this ticketにいくつかの議論があります。その解決方法はおそらくthis oneとなります。

関連する問題