【问题标题】:pycassa TypeError: A str or unicode, unable to do cassandra insertpycassa TypeError: A str or unicode, cannot be do cassandra insert
【发布时间】:2012-09-16 10:05:24
【问题描述】:

我的脚本是python,cassandra是data stax社区版。

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

这是我在尝试插入 cassandra 列族时遇到的错误。

代码如下:

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

x 是“{key:value}”形式的简单数组

错误日志提示:

    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)        

我在这里似乎很想念一些东西......好吧,这就是我来这里咨询专家的原因!

【问题讨论】:

  • 您的回溯与您的代码示例不匹配;我看到str("swf"): str("aws") 的部分行。
  • 我同意,cf.insert() 包含 swf、标题和描述。由于错误追溯到“swf”,我认为它有问题。
  • 您是否仔细检查了您的values?显然某些东西包含一个整数,而不是一个字符串。
  • 有什么方法可以将此 int 转换为 str?我认为 str() 会帮助

标签: python string error-handling cassandra pycassa


【解决方案1】:

确保您的值与您的列族类型相匹配。看来您的列族要么是 BytesType 要么没有与之关联的类型,因此 pycassa 将只接受字符串值。您可以将所有值映射到 str,使用带有嵌套 dict 理解的列表理解(后者需要 python 2.7 及更高版本):

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

【讨论】:

  • 谢谢!就是这个!这是错误的比较器类型。我将其更改为 AciiType,现在它可以工作了。现在虽然关系不大,但我可以问一下,当我们尝试插入类似于 rss 提要的行时,您推荐什么比较器
  • 对于国际文本(包括 RSS 传递的文本),例如我会使用 UTF8Type 列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 2021-06-25
  • 2018-06-07
  • 2019-06-18
  • 2017-03-09
相关资源
最近更新 更多