我想修改表格中所有内容的时间戳。看起来我应该可以使用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))
我做错了什么?
答案 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')