2011-11-23 54 views
2

我想在pycassa中設置一些column_validators,但在使用某種supercolum設置時遇到問題:我似乎無法爲包含在超列中的列設置驗證程序。我想是這樣在pycassa中使用column_validators

cf.column_validators['supercolumn_name']['column_name'] = types.FloatType() 

不工作,因爲第二庫尚未初始化,試圖將其設置爲類似

cf.column_validators['supercolumn_name'] = {} 

也不管用...因此,任何關於如何處理這個問題的例子都會受到讚賞,因爲官方的pycassa文檔沒有提供更詳細的信息。 此外,這些驗證器似乎不是持久的,所以有沒有可能持續設置它們?

編輯:看着pycassa的源代碼後,我發現,對於該驗證你不必指定列包含在supercolumn,所以

cf.column_validators['column_name'] = types.FloatType() 

應該做的伎倆!仍然問題是否驗證者可以以某種方式持久化?

回答

4

你可能不想直接修改column_validators。這些是根據列族的column_metadata屬性自動設置的。您可以在pycassa中使用'alter_column'命令來修改Cassandra中的列族架構。然後column_validators將被永久正確設置。

http://pycassa.github.com/pycassa/api/pycassa/system_manager.html#pycassa.system_manager.SystemManager.alter_column

+1

正確。如果你想持久化,你需要使用'alter_column'來改變實際的模式。 Pycassa允許你自己設置column_validator,這樣你就可以在cassandra-cli中做'假設',但它不會持久化,所以沒有其他客戶端會自動將值轉換爲該類型。 –

+0

@nickmbailey:感謝這就是我一直在尋找的東西,因爲在任何教程中都沒有提到它,所以我很難找到它,因爲你並不真正瞭解你將不得不期待哪個模塊它... –