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。
本质上,我正在尝试获取为单个记录插入生成的密钥。类似于:
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。