我如何获得所有的钥匙,是存在的Cassandra列的家庭pycassa?
题
是任何具有工作经验 pycassa 我有一个疑问。我如何获得所有的钥匙都存储在数据库?
在这个小段,我们需要得到钥匙,为了得到相关列(这里的钥匙是'foo'和'bar'),这是好的但是我要求的是得到所有的钥匙(唯一的钥匙)在一次作为蟒蛇的名单或类似的数据结构。
cf.multiget(['foo', 'bar'])
{'foo': {'column1': 'val2'}, 'bar': {'column1': 'val3', 'column2': 'val4'}}
谢谢。
解决方案
其他提示
您可以尝试: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]
get_range([start][, finish][, columns][, column_start][, column_finish][, column_reversed][, column_count][, row_count][, include_timestamp][, super_column][, read_consistency_level][, buffer_size])
获取一个迭代过的行 指定键范围。
上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返回发电机。我们可以创建一个从产生的字典,并从拿到钥匙了。
COLUMN_COUNT = 0结果限制到row_key。然而,由于这些结果没有列我们还需要filter_empty。
filter_empty =假将使我们能够获得满意的结果。然而空行和范围鬼可以包括在我们的结果了。
如果我们不介意更多的开销,想起来的第一列将解决空行和范围鬼。
dict(cf.get_range(column_count=1)).keys()
有一个问题 Santhosh的 和 kzarns' 答案,因为你带来存储器的一个潜在的巨大字典,你是立即丢弃的。一个更好的办法将是使用名单推导为此:
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!