rethinkDB从insert python中拔出generated_key

时间:2015-08-18 00:07:10

标签: python rethinkdb reql

基本上,我试图获取单个记录插入的生成密钥。类似的东西:

rethinkdb.table('test').insert(request.data).pluck('generated_keys')[0].run(connection)

让它返回类似:

{
    "id": "61fa30de-cfb1-4133-ae86-cf6e4f1a011e"
}

2 个答案:

答案 0 :(得分:2)

在Python中,如果要为插入的文档返回所有主键的数组,可以执行以下操作:

 r.table('test').insert({ "hello": 'world' })['generated_keys'].run(conn)

如果希望查询将第一个插入文档的主键作为字符串返回,则可以执行以下操作:

r.table('test').insert({ "hello": 'world' })['generated_keys'][0].run(conn)

答案 1 :(得分:2)

我只想提供一些提示,以便您以后可以解决这个问题。首先,您可以使用typeOf来查找数据类型。

r.table('dummy').insert({f: "foo"}).typeOf()
"OBJECT"

所以你知道是否返回一个对象。接下来,您转到RethinkDB文档,尝试查找一些类似的功能。一个好的猜测是get_field http://rethinkdb.com/api/javascript/get_field/

可以在对象上调用get_field:

  

sequence.getField(attr)→sequence

     

singleSelection.getField(attr)→value

     

object.getField(attr)→value

让我们看看它的回报:

r.table('dummy').insert({f: "foo"}).getField('generated_keys').typeOf()
"ARRAY"

让我们找一个返回数组中元素的命令。您可以再次查看该文档,并会注意到nth命令从数组中返回第n个元素。因此,我们现在可以这样做:

r.table('dummy').insert({f: "foo"}).getField('generated_keys').nth(0)
"c2b1bf69-a926-4c27-b1a6-011d47c700df"

让我们尝试简化它。使用getField正在进行中。要缩短它,可以使用方括号()从对象

获取单个字段
r.table('dummy').insert({f: "foo"})('generated_keys').nth(0)
"77f4aca6-9219-494e-9998-23eb9abcd5e0"

但是使用nth也会让人感到厌烦。我们可以做空。幸运的是,也可以在阵列上调用括号。http://rethinkdb.com/api/javascript/bracket/

  

()命令也接受整数参数作为数组偏移量,例如   第n个命令。

结合我们拥有的一切:

r.table('dummy').insert({f: "foo"})('generated_keys')(0)

这一切都在Data Explorer上直接运行,但我认为你可以通过查看JavaScript并将其转换为Python来轻松地将它们转换为Python。