كيف أحصل على جميع المفاتيح المخزنة في عائلة عمود كاساندرا مع Pycassa؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

هل أي شخص لديه خبرة مع بيكاسا لدي شك في ذلك. كيف أحصل على جميع المفاتيح المخزنة في قاعدة البيانات؟

حسنا في هذا القصاص الصغير، نحتاج إلى إعطاء المفاتيح من أجل الحصول على الأعمدة المرتبطة (هنا المفاتيح "فو" و "شريط")، وهذا جيد ولكن متطلباتي هو الحصول على جميع المفاتيح (المفاتيح فقط) في وقت واحد كقائمة 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]

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/pycassa/columnfamily.html#pycassa.columnfamily.columnfamily.get_range.

تحسين طفيف على حل سانثوش

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()

هناك مشكلة مع سانثوش و 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