2012-09-16 43 views
5

Mi guión es python y cassandra es la edición de comunidad de stax de datos.pycassa TypeError: Un str o unicode, no se puede insertar cassandra

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

este es el error que estoy recibiendo al intentar insertar en una familia de columnas cassandra.

el código es como:

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

x es una matriz simple en forma de "{clave: valor}"

El registro de errores sugiere:

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)   

Parece ser algo muy diminuto me falta aquí ... ¡por eso vine aquí para preguntar a expertos!

+0

El rastreo no coincide con su ejemplo de código; Veo una línea parcial de 'str (" swf "): str (" aws ")'. –

+0

Acepto, cf.insert() contiene swf, título y descripción. Dado que el error se remonta a 'swf', pensé que había algo mal con eso. – yuvrajm

+0

¿Comprueba dos veces su 'valor's? Claramente, algo contiene un número entero, no una cadena. –

Respuesta

4

Asegúrese de que los valores coincidan con el tipo de familia de columna. Parece que su familia de columnas es un BytesType o no tiene ningún tipo asociado, por lo que pycassa solo aceptará valores de cadena. Puede asignar valores a todos sus str con una lista por comprensión con una comprensión dict anidada (este último requiere Python 2.7 en adelante):

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

¡Gracias! ¡Eso es todo! Fue el tipo de comparador el que cometió un error. Lo cambié a AciiType y ahora está funcionando. Ahora bien, aunque no está relacionado mucho, pero me pregunto, qué comparador recomiendas cuando intentemos insertar filas como la de un feed rss – yuvrajm

+1

Para texto internacional (incluido el texto entregado por RSS) como usaría una columna UTF8Type . –

Cuestiones relacionadas