6

有没有人有使用pycassa的经验,我对此表示怀疑。如何获取存储在数据库中的所有密钥?

好吧,在这个小片段中,我们需要提供键以获取关联的列(这里的键是“foo”和“bar”),这很好,但我的要求是一次获取所有键(只有键)作为 Python 列表或类似的数据结构。

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

谢谢。

4

5 回答 5

11

尝试:

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

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

于 2010-03-29T20:08:44.717 回答
5

你可以试试: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]
于 2012-10-15T13:10:37.863 回答
1

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

于 2011-03-17T21:15:19.763 回答
1

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=False 将允许我们得到结果。但是,现在我们的结果中可能会包含空行和范围重影。

如果我们不介意更多的开销,那么只获取第一列将解决空行和范围重影。

dict(cf.get_range(column_count=1)).keys()
于 2013-07-25T14:52:10.547 回答
0

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!
于 2015-02-12T20:30:24.310 回答