繁体   English   中英

如何使用pycassa获取存储在Cassandra列族中的所有密钥?

[英]How do I get all the keys that are stored in the Cassandra column family with pycassa?

有没有经验与pycassa合作的人我对它有疑问。 如何获取存储在数据库中的所有密钥?

好吧,在这个小片段中,我们需要给出键以获得相关的列(这里的键是'foo'和'bar'),这很好,但我的要求是一次获取所有键(仅键)作为Python列表或类似的数据结构。

cf.multiget(['foo', 'bar'])
{'foo': {'column1': 'val2'}, 'bar': {'column1': 'val3', 'column2': 'val4'}}

谢谢。

尝试:

    list(cf.get_range().get_keys())

更好的东西在这里: http//github.com/vomjom/pycassa

您可以尝试: cf.get_range(column_count=0,filter_empty=False)

# Since get_range() returns a generator - print only the keys.
for value in cf.get_range(column_count=0,filter_empty=False):
    print value[0]

Santhosh解决方案的微小改进

dict(cf.get_range(column_count=0,filter_empty=False)).keys()

如果您关心订单:

OrderedDict(cf.get_range(column_count=0,filter_empty=False)).keys()

get_range返回一个生成器。 我们可以从生成器创建一个dict并从中获取密钥。

column_count = 0将结果限制为row_key。 但是,因为这些结果没有列,所以我们还需要filter_empty。

filter_empty = False将允许我们获得结果。 但是现在我们的结果中可能包含空行和范围重影。

如果我们不介意更多的开销,只获得第一列将解析空行和范围鬼。

dict(cf.get_range(column_count=1)).keys()

get_range([start][, finish][, columns][, column_start][, column_finish][, column_reversed][, column_count][, row_count][, include_timestamp][, super_column][, read_consistency_level][, buffer_size])

获取指定键范围内的行的迭代器。

http://pycassa.github.com/pycassa/api/pycassa/columnfamily.html#pycassa.columnfamily.ColumnFamily.get_range

Santhoshkzarns的答案存在问题,因为你带来的记忆是一个你可能立即丢弃的潜在巨大的词典。 更好的方法是使用列表推导:

keys = [c[0] for c in cf.get_range(column_count=0, filter_empty=False)]

这将迭代get_range返回的生成器,将密钥保存在内存中并存储列表。

如果键列表也可能太大而无法一次性保存在内存中而您只需要迭代一次,则应使用生成器表达式而不是列表推导

kgen = (c[0] for c in cf.get_range(column_count=0, filter_empty=False))
# you can iterate over kgen, but do not treat it as a list, it isn't!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM