2012-09-16 3 views
5

Мои сценарии - это python, а cassandra - это сообщество данных stax.pycassa ТипError: str или unicode, неспособный сделать вставку cassandra

TypeError: A str or unicode value was expected, but int was received instead (3902503) 

Это ошибка, которую я получаю при попытке вставить в семейство колонн кассандры.

код как:

for x in feed: 
    cf.insert(uuid.uuid4(), x) 

х простой массив в виде "{ключ: значение}"

Журнал ошибок наводит на мысль:

Traceback (most recent call last): 
     File "C:\Users\me\Desktop\pro1\src\pro1.py", line 73, in <module> 
     str("swf"): str("aws") 
     File "c:\Python27\lib\site-packages\pycassa\columnfamily.py", line 969, in insert 
     mut_list = self._make_mutation_list(columns, timestamp, ttl) 
     File "c:\Python27\lib\site-packages\pycassa\columnfamily.py", line 504, in _make_mutation_list 
     columns.iteritems()) 
     File "c:\Python27\lib\site-packages\pycassa\columnfamily.py", line 503, in <lambda> 
     return map(lambda (c, v): Mutation(self._make_cosc(_pack_name(c), _pack_value(v, c), timestamp, ttl)), 
     File "c:\Python27\lib\site-packages\pycassa\columnfamily.py", line 462, in _pack_value 
     return packer(value) 
     File "c:\Python27\lib\site-packages\pycassa\marshal.py", line 231, in pack_bytes 
     % (v.__class__.__name__, str(v))) 
    TypeError: A str or unicode value was expected, but int was received instead (3902503)   

Там, кажется, быть чем-то очень минутным, я здесь не хватает ... ну вот почему я пришел сюда, чтобы спросить экспертов!

+0

Ваш отслеживающий не соответствует вашему примеру кода; Я вижу частичную строку 'str (" swf "): str (" aws ")'. –

+0

Согласен, cf.insert() содержит swf, название и описание. Поскольку ошибка прослеживается до «swf», я думал, что с ней что-то не так. – yuvrajm

+0

Вы дважды отметили свое 'значение'? Ясно, что что-то содержит целое число, а не строку. –

ответ

4

Убедитесь, что ваши значения соответствуют типу вашего типа столбцов. Кажется, что ваше семейство столбцов либо является BytesType, либо не имеет ассоциированного с ним типа, поэтому pycassa будет принимать только строковые значения. Вы можете отобразить все значения в str с пониманием списка с вложенной Dict понимания (в последнем случае требуется Python 2.7 и выше):

cf.insert(uuid.uuid4(), [{k: str(v) for k, v in d.iteritems()} for d in x]) 
+1

Спасибо! Это оно! Это был тип компаратора, который был ошибочным. Я изменил его на AciiType и теперь его работу. Теперь, хотя он не имеет большого значения, но могу ли я спросить, какой компаратор вы рекомендуете, когда мы пытаемся вставить строки, похожие на строки rss-канала? – yuvrajm

+1

Для международного текста (включая текст, предоставленный RSS), например, я бы использовал столбец UTF8Type , –