是任何具有工作经验 pycassa 我有一个疑问。我如何获得所有的钥匙都存储在数据库?

在这个小段,我们需要得到钥匙,为了得到相关列(这里的钥匙是'foo'和'bar'),这是好的但是我要求的是得到所有的钥匙(唯一的钥匙)在一次作为蟒蛇的名单或类似的数据结构。

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]

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

上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!
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top