1

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

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

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))

我究竟做错了什么?

4

1 回答 1

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')
于 2014-03-16T20:02:29.430 回答