2012-09-16 16 views
5

Il mio scripting è python e cassandra è data stax community edition.pycassa TypeError: A str o unicode, impossibile inserire cassandra insert

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

questo è l'errore che sto ottenendo durante il tentativo di inserire in una famiglia di colonne cassandra.

il codice è simile:

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

x è un semplice array sotto forma di "{chiave: valore}"

Il log degli errori suggerisce:

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)   

Sembra essere qualcosa di molto piccolo mi manca qui ... beh ecco perché sono venuto qui per chiedere esperti!

+0

tuo traceback non corrisponde il tuo esempio di codice; Vedo una riga parziale di 'str (" swf "): str (" aws ")'. –

+0

Sono d'accordo, cf.insert() contiene swf, titolo e descrizione. Poiché l'errore riconduce a "swf", ho pensato che ci fosse qualcosa di sbagliato in questo. – yuvrajm

+0

Hai ricontrollato il tuo valore? Chiaramente qualcosa contiene un intero, non una stringa. –

risposta

4

Assicurarsi che i valori corrispondano al tipo di famiglia di colonne. Sembra che la tua famiglia di colonne sia un BytesType o che non abbia alcun tipo associato, quindi pycassa accetterà solo valori stringa. È possibile mappare tutti i valori a str con una lista di comprensione con la comprensione dict annidato (quest'ultimo richiede python 2.7 in su):

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

Grazie! Questo è! Era il tipo di comparatore che era in errore. L'ho cambiato in AciiType e ora funziona. Ora, anche se non è molto correlato, ma posso chiederti, quale comparatore si consiglia quando stiamo cercando di inserire righe come quelle di un feed rss – yuvrajm

+1

Per il testo internazionale (incluso il testo RSS-delivery) come ad esempio utilizzare una colonna UTF8Type . –

Problemi correlati