Cassandra 3.7 с Python, объект ‘NoneType’ не имеет атрибута ‘encode_message’

#python #cassandra

#python #cassandra

Вопрос:

У меня есть простой клиент python для извлечения данных из cassandra. Сама строка запроса выполняется нормально с использованием клиента DBeaver EE.

 def getDataSet(self, station_id, tablename):
    prepared_stmt = self.session.prepare ( "SELECT event_time, reading FROM "  
                                           tablename   " WHERE station_id = ?;")
    bound_stmt = prepared_stmt.bind([station_id])
    rslt = self.session.execute(bound_stmt)
    df = pd.DataFrame()
    for r in rslt:
        df = df.append(r)
    return df

def __init__(self):
    cluster = Cluster(
        contact_points=['127.0.0.1'],
        )
    self.session = cluster.connect('data')
    self.session.row_factory = tuple_factory
    self.session.client_protocol_handler = NumpyProtocolHandler
  

Я получаю следующее исключение

File "/home/david/git/python-example/src/start/fetchcassandra.py", line 13, in getDataSet
rslt = self.session.execute(bound_stmt)
File "/usr/local/lib/python3.4/dist-packages/cassandra/cluster.py", line 1961, in execute
return self.execute_async(query, parameters, trace, custom_payload, timeout, execution_profile).result()
File "/usr/local/lib/python3.4/dist-packages/cassandra/cluster.py", line 3649, in result
raise self._final_exception
cassandra.cluster.NoHostAvailable: ('Unable to complete the operation against any hosts', {<Host: 127.0.0.1 datacenter1>: AttributeError("'NoneType' object has no attribute 'encode_message'",)})

Комментарии:

1. Обновление драйвера cassandra python до версии 3.7.0 решило эту проблему. Он не был указан как ошибка в версии 3.6.0, которую я использовал.

2. Такая же ошибка возникает с другими библиотеками Python и Python v3.7.1 AttributeError: 'NoneType' object has no attribute '....'

Ответ №1:

Скорее всего, NumpyProtocolHander не создан, поэтому вы назначаете None в качестве обработчика протокола.

Смотрите здесь примечания по установке и обратитесь к вашему pip-журналу, чтобы узнать, почему он не создается.