2012-09-16 6 views
5

Moje skrypty to python i kassandra to edycja społecznościowa stax.pycassa TypeError: Str lub unicode, niezdolny do zrobienia wstawki z kassandra

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

To jest błąd, który otrzymuję podczas próby wstawienia do rodziny kolumnowej Kasandra.

kod jest podobny:

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

x jest prosta tablica w formie "{klucz: wartość}"

Dziennik błędów sugeruje:

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)   

Wydaje być kimś bardzo nieobecnym tutaj ... no cóż, to dlatego przyjechałem tutaj, by zapytać ekspertów!

+0

Twój traceback nie pasuje do Twojego przykład kodu; Widzę częściową linię 'str (" swf "): str (" aws ")'. –

+0

Zgadzam się, cf.insert() zawiera swf, tytuł i opis. Ponieważ błąd śledzi "swf", pomyślałem, że coś jest z nim nie tak. – yuvrajm

+0

Czy doublecheck swoje "wartości"? Oczywiście coś zawiera liczbę całkowitą, a nie ciąg. –

Odpowiedz

4

Upewnij się, że Twoje wartości są zgodne z typem rodziny kolumn. Wygląda na to, że twoja rodzina kolumn jest typu BytesType lub nie ma z nim żadnego typu, więc pycassa zaakceptuje tylko wartości ciągu. Można mapować wszystkie wartości do str z listowego z zagnieżdżonego dict zrozumieniem (ten ostatni wymaga Pythona 2.7 i wyżej):

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

Dzięki! To jest to! Był to typ komparatora, który popełnił błąd. Zmieniłem go na AciiType, a teraz działa. Teraz, chociaż nie jest to zbytnio powiązane, ale mogę zapytać, jaki komparator polecasz, gdy próbujemy wstawiać wiersze, coś takiego jak w kanale rss – yuvrajm

+1

Dla tekstu międzynarodowego (w tym tekstu dostarczanego przez RSS), takiego jak w przypadku użycia kolumny UTF8Type . –

Powiązane problemy