1

我不确定我是否缺少一些编程的基本规则或使用 PyCassa 的一些基本规则!

问题是:我需要查询 cassandra 以显示 column5(列名)值为 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

我确实理解某些人,这个问题可能听起来太幼稚了......但相信我,自上周末以来我一直在努力解决这个问题,现在别无选择,我在 Stackoverflow 上!

4

2 回答 2

2

在第一个示例中,每次迭代都会打印 t,这会导致满足条件的每条记录都有一行。第二,在每次迭代期间替换 t,因此只打印最终值。如果您只想打印它,您可以缩进 print 语句以使其成为循环的一部分,尽管第一个示例适用于此。如果要将其保存在列表中,请创建一个列表并在每次迭代中将 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
于 2012-02-23T01:05:52.120 回答
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)]

或者保持 for 循环符号,

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()) 

是的,我认为 python 数组(列表)使用 [] 表示法而不是 {}。

于 2012-05-29T18:53:00.863 回答