Проверьте, является ли набор результатов Cassandra пустым или нет (Python) - PullRequest
0 голосов
/ 05 июля 2018

у меня работает что-то вроде этого

    def searchCassanadra(self):
    # Iterate over every pokemon
    for x in self.pokemon_list:
        # Query
        query = session.execute("SELECT pokemon_id FROM ds_pokedex.pokemon where pokemon_id=" + repr(x))

Приведенный выше код возвращает мне <class 'cassandra.cluster.ResultSet'>

Как я могу проверить, является ли это ResultSet пустым или заполненным из Кассандры?

Я кодирую на питоне. Извините за вопрос новичка.

Если я попытаюсь сделать

         if query.current_rows:
            print 'y'
        else:
            print 'n'

Я получаю эту ошибку

ValueError: Истинное значение DataFrame неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 27 сентября 2018

Похоже, ваш атрибут query._current_rows представляет собой DataFrame от pandas, поэтому при попытке запустить query.current_rows значение ValueError всегда будет вызываться независимо от того, пусто ResultSet или нет.

Из документов Cassandra Driver для ResultSet мы видим, что функция current_rows ищет наличие атрибута _current_rows:

@property
def current_rows(self):
    """
    The list of current page rows. May be empty if the result was empty,
    or this is the last page.
    """
    return self._current_rows or []

Если self._current_rows выше - это DataFrame от pandas, он всегда будет возвращать ValueError. Например:

>>> data = {'col1': [1, 2], 'col2': [3, 4]}
>>> df = pd.DataFrame(data)
>>> df
   col1  col2
0     1     3
1     2     4
>>> df or []
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/src/.pyenv/versions/3.6.5/lib/python3.6/site-packages/pandas/core/generic.py", line 1573, in __nonzero__
    .format(self.__class__.__name__))
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> df = pd.DataFrame()
>>> df or []
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/src/.pyenv/versions/3.6.5/lib/python3.6/site-packages/pandas/core/generic.py", line 1573, in __nonzero__
    .format(self.__class__.__name__))
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Поэтому, чтобы проверить, содержит ли DataFrame pandas в ResultSet данные, вы можете сделать что-то вроде этого:

if not query._current_rows.empty:
        print 'y'
    else:
        print 'n'

(Примечание: я не знаю, как выглядит ваш session.row_factory, но я предполагаю, что он создает DataFrame для панд из строк, возвращаемых Кассандрой, аналогично этому ответу)

...