2012-02-22 54 views
1

我不確定我是否缺少一些基本的編程規則或一些使用PyCassa的基本規則!Pycassa col_fam.get_indexed_slices(clause)Whats wrong

問題是: 我需要查詢cassandra以顯示列5(列名稱)的值爲5的所有行。我能夠在for循環內打印此結果,但不能在外面打印。 我當前的代碼是:

expr2 = create_index_expression('column5', '5') 
clause2 = create_index_clause([expr2], count=20) 
for keyx, colx in col_fam.get_indexed_slices(clause): 
     print colx 

這工作,但什麼不工作是:

expr2 = create_index_expression('column5', '5') 
clause2 = create_index_clause([expr2], count=20) 
for keyx, colx in col_fam.get_indexed_slices(clause): 
    t = colx 
    # ... 
print t 

我明白一些,這個問題聽起來太kiddish ...但是請相信我,我自上週末以來我一直對此感到震驚,現在當沒有其他選擇時,我就在Stackoverflow上!

+0

定義「不起作用」。你有錯誤嗎?你得到的東西不是你期望的嗎? – kindall 2012-02-23 00:27:39

回答

2

在第一個示例中,t在每次迭代中都打印出來,每次記錄都會得到一行,滿足條件。在第二步中,t在每次迭代過程中被替換,因此只打印最終值。如果你只是想打印它,你可以縮進打印語句,使其成爲循環的一部分,雖然第一個例子可以用於這一點。如果你想將其保存在列表中創建一個列表,並在每次迭代中追加COLX它:

expr2 = create_index_expression('column5', '5') 
clause2 = create_index_clause([expr2], count=20) 
t=[] 
for keyx, colx in col_fam.get_indexed_slices(clause): 
    t.append(colx) 
print t 
+0

謝謝!它確實奇妙!但是將OrderedDict轉換爲簡單而有用的數組的任何解決方案?這個給定的查詢返回約10列指定。 – yuvrajm 2012-02-23 08:33:50

+0

你的意思是你想保留keyx但不是在字典中? t.append((keyx,colx))創建一個元組列表。你想做什麼? – ABS 2012-02-23 08:42:47

+0

我只需要有一個簡單的數組,例如{} – yuvrajm 2012-02-23 09:28:40

0

只是對第一個答案擴大,這是一個緊湊的方式得到輸出OrderedDictionaries爲陣列(名單)。

而我遺漏了count=20因爲你說你想所有的行。

expr2 = create_index_expression('column5', '5') 
clause2 = create_index_clause([expr2]) 

output = [colx.items() for keyx, colx in col_fam.get_indexed_slices(clause2)] 

還是保持了循環符號,

expr2 = create_index_expression('column5', '5') 
clause2 = create_index_clause([expr2]) 
output = [] 

for keyx, colx in col_fam.get_indexed_slices(clause2): 
    output.append (colx.items()) 

是的,我第二是蟒蛇陣列(列表)使用[]符號,而不是{}。