2012-09-16 19 views
5

Kịch bản của tôi là python và cassandra là phiên bản cộng đồng dữ liệu stax.pycassa LoạiError: Một đường hoặc unicode, không thể làm cassandra chèn

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

đây là lỗi tôi nhận được khi cố gắng chèn vào họ cột cassandra.

mã giống như:

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

x là một mảng đơn giản theo hình thức "{key: value}"

Nhật ký lỗi gợi ý:

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)   

Dường như để có một cái gì đó rất phút tôi đang mất tích ở đây ... cũng thats lý do tại sao tôi đến đây để hỏi các chuyên gia!

+0

traceback của bạn không phù hợp ví dụ mã của bạn; Tôi thấy một dòng của 'str (" swf "): str (" aws ")'. –

+0

Tôi đồng ý, cf.insert() chứa swf, tiêu đề và mô tả. Kể từ khi các dấu vết lỗi để 'swf' Tôi nghĩ rằng có cái gì đó sai trái với nó. – yuvrajm

+0

Bạn đã từng kiểm tra lại 'giá trị' của mình chưa? Rõ ràng một cái gì đó có chứa một số nguyên, không phải là một chuỗi. –

Trả lời

4

Đảm bảo giá trị của bạn phù hợp với loại gia đình cột của bạn. Có vẻ như họ cột của bạn là một BytesType hoặc không có loại nào được liên kết với nó, vì vậy pycassa sẽ chỉ chấp nhận các giá trị chuỗi. Bạn có thể lập bản đồ tất cả các giá trị của bạn để str với một sự hiểu biết danh sách với một sự hiểu biết dict lồng nhau (sau này đòi hỏi python 2.7 trở lên):

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

Cảm ơn! Đây chính là nó! Đó là loại so sánh bị lỗi. Tôi đã đổi nó thành AciiType và bây giờ nó hoạt động. Bây giờ mặc dù nó không liên quan nhiều, nhưng tôi có thể hỏi, bạn sẽ đề xuất gì so sánh khi chúng tôi đang cố gắng chèn các hàng giống như một nguồn cấp dữ liệu rss – yuvrajm

+1

Đối với văn bản quốc tế (bao gồm cả văn bản được gửi RSS) chẳng hạn như tôi sử dụng cột UTF8Type . –

Các vấn đề liên quan