如何在rethinkdb中执行涉及字符串字段的映射?

时间:2014-03-16 14:52:13

标签: python rethinkdb rethinkdb-python

我想修改表格中所有内容的时间戳。看起来我应该可以使用for_each,但我不确定如何。

基于documentation,我认为我的函数应该返回一个写对象。但我在做涉及字符串的事情时遇到了麻烦。这是一个非常简单的例子:

r.expr([{'time':"2014"}]).map(lambda x: datetime.strptime(x['time'],'%Y'))

这给了我一个错误:

TypeError: must be string, not GetField

有趣的是,以下工作:

map(lambda x: datetime.strptime(x,'%Y'), 
    r.expr([{'time':"2014"}])
     .map(lambda x: x['time'])
     .run(conn))

我做错了什么?

1 个答案:

答案 0 :(得分:1)

datetime.strptime是一个python方法而不是ReQL方法,因此您无法将其发送到服务器。

当您在查询中调用run时,驱动程序将在使用ReQL对象调用时保存lambda函数的输出。当它将命中datetime.strptime(x['time'],'%Y'))时,您将收到错误,因为您调用datetime.strptime带有无效参数。

如果您有兴趣了解更多信息,可以查看:http://www.rethinkdb.com/blog/lambda-functions/

您可能希望将年份存储为数字。这样,我认为您正在寻找的查询是

r.expr([{'time':2014}]).map(lambda x: r.time(x['time'], 1, 1, '+00:00')

如果你想保留一个字符串,你可以

r.expr([{'time':2014}]).map(lambda x: r.time(x['time'].coerce_to("NUMBER"), 1, 1, '+00:00')