2015-08-18 1 views
1

По сути, я пытаюсь получить сгенерированный ключ для одной записи. Что-то вроде:rethinkDB pluck generated_key from insert python

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

и он вернуть что-то вроде:

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

ответ

1

Я просто хочу дать несколько советов, чтобы вы могли понять это позже. Во-первых, вы можете использовать typeOf, чтобы найти тип данных.

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

Знаете, если вы возвращаете объект. Затем вы переходите к документу RethinkDB, попробуйте найти аналогичную функцию. Хорошее предположение get_fieldhttp://rethinkdb.com/api/javascript/get_field/

И get_field можно назвать на объекте:

sequence.getField (атр) → Последовательность

singleSelection.getField (атр) → значение

объекта. getField (attr) → значение

Посмотрим, что он возвращает:

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 также поле annyoying немного. Можем ли мы сделать это коротким. К счастью, скобка также может быть вызвана массивом. http://rethinkdb.com/api/javascript/bracket/

The() команда также принимает целые аргументы в виде смещений массива, как п-й команды.

Объединить все, что мы имеем:

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

Это все бегут direcly Проводнике данных, но я думаю, что вы можете легко конвертировать их в Python, глядя на JavaScript и перевести на Python.

2

В Python, если вы хотите, чтобы вернуть массив всех первичных ключей для вставленных документов, вы можете сделать следующее:

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

Если вы хотите, чтобы запрос, чтобы вернуть первичный ключ первого вставленного документа в виде строки, вы можете сделать следующее:

r.table('test').insert({ "hello": 'world' })['generated_keys'][0].run(conn) 
Смежные вопросы