rethinkDB 从插入 python 中提取 generated_key

rethinkDB pluck generated_key from insert python

本质上,我正在尝试获取为单个记录插入生成的密钥。类似于:

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

并return像这样:

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

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

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

如果你想查询return第一个插入文档的主键作为字符串,你可以这样做:

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

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

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

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

并且get_field可以在对象上调用:

sequence.getField(attr) → sequence

singleSelection.getField(attr) → value

object.getField(attr) → value

让我们看看它 return 是什么:

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

让我们找到一个命令 return 数组中的一个元素。您可以再次查看该文档,您会注意到 nth 命令到 return 数组中的第 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/

The () command also accepts integer arguments as array offsets, like the nth command.

结合我们拥有的一切:

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

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