Wie bekomme ich alle Schlüssel, die mit pycassa in der Cassandra Spalte Familie abgelegt?

StackOverflow https://stackoverflow.com/questions/2430539

  •  19-09-2019
  •  | 
  •  

Frage

Ist jemand Erfahrung mit Arbeits mit pycassa ich mit ihm einen Zweifel haben. Wie kann ich alle die Schlüssel erhalten, die in der Datenbank gespeichert werden?

Auch in diesem kleinen Schnipsel benötigen wir die Schlüssel geben, um die damit verbundenen Spalten zu bekommen (hier sind die Schlüssel ‚foo‘ und ‚bar‘), das ist in Ordnung, aber meine Forderung ist es, alle die Schlüssel zu bekommen (nur Schlüssel ) sofort als Python-Liste oder eine ähnliche Datenstruktur.

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

Danke.

War es hilfreich?

Lösung

versuchen:

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

mehr gute Sachen hier: http://github.com/vomjom/pycassa

Andere Tipps

Sie können versuchen: 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])

  

Holen Sie sich einen Iterator über Zeilen in einem   angegebener Schlüsselbereich.

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

Minor Verbesserung auf Santhosh Lösung

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

Wenn Sie kümmern sich um Ordnung:

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

get_range gibt einen Generator. Wir können einen dict vom Generator erstellen und die Schlüssel aus, dass bekommen.

column_count = 0 Grenzwerte Ergebnisse der row_key. Da jedoch diese Ergebnisse haben keine Spalten wir auch brauchen filter_empty.

filter_empty = False wird uns erlauben, die Ergebnisse zu erhalten. Jedoch leere Zeilen und Reichweite Geister können nun in unserem Ergebnis aufgenommen werden.

Wenn wir Overhead nicht mehr dagegen haben, wird nur die erste Spalte immer lösen die leeren Zeilen und Reichweite Gespenster.

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

Es gibt ein Problem mit Santhosh der und kzarns' Antworten, wie Sie in Erinnerung eine potenziell riesige dict zu bringen sind, dass Sie sofort sind zu verwerfen. Ein besserer Ansatz wäre mit Listenkomprehensionen für diesen:

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

Diese iteriert über den Generator von get_range zurückgegeben, hält den Schlüssel im Speicher und speichert die Liste.

Wenn die Liste der Tasten, unter denen auch zu potenziell großen es im Speicher zu halten alle auf einmal und nur einmal zu durchlaufen muß, sollten Sie ein Generator Ausdruck anstelle einer Liste Verständnis :

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!
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top