Работа с вложенными объектами с использованием couchdb-python - PullRequest
0 голосов
/ 08 февраля 2019

Отказ от ответственности: и Python, и CouchDB являются новыми для меня.Пока что мое «программирование» в основном состояло из сценариев Bash.

Я пытаюсь создать небольшой сценарий, который обновляет объекты в базе данных CouchDB.Объекты, однако, создаются не моим сценарием, а приложением под названием Tap Forms, которое использует CouchDB для синхронизации.В основном я пытаюсь автоматически обновить содержимое приложения.Это также означает, что я не могу реально влиять на структуру или имена объектов в CouchDB.

База данных в основном заполнена объектами этой структуры:

{
  "_id": "rec-3b17...",
  "_rev": "21-cdf6...",
  "values": {
    "fld-c3d4...": 4,
    "fld-1def...": 1000000000000,
    "fld-bb44...": 760000000000,
    "fld-a44f...": "admin,name",
    "fld-5fc0...": "SSD",
    "fld-642c...": true,
  },
  "deviceName": "MacBook Air",
  "dateModified": "2019-02-08T14:47:06.051Z",
  "dateCreated": "2019-02-08T11:33:00.018Z",
  "type": "frm-7ff3...",
  "dbID": "db-1435...",
  "form": "frm-7ff3..."
}

Я сократил числа aи удалил некоторые записи, чтобы повысить читабельность).Поскольку я знаю некоторые из этих значений, мне удалось создать представление, которое находит _id объекта на сервере.Затем я использую модуль python-couchdb, как описано в документации:

for item in db.view('CustomViews/test2', key="GENERIC"):
    doc = db[item.id]

Это дает мне объект.Однако я хочу обновить один значений в массиве значений, скажем, fld-c3d4....Но как?Использование doc['values'] = 'new_value' обновляет весь массив.Я пробовал другие (казалось бы, логичные) способы, аналогичные doc['values['fld-c3d4']'] = 'new_value', но не мог обернуться вокруг этого.Я не смог найти пример ни в одной документации.

1 Ответ

0 голосов
/ 09 февраля 2019

Итак, вот пример, как обновить fld-c3d4.

. У вас есть документ, представляющий словарь с вложенным словарем.

Если вы хотите получить значения, вы сделаетечто-то вроде этого:

values = doc['values']

Теперь значения переменных указывают на значения в вашем документе.

Оттуда вы можете получить доступ к дополнительному значению:

values['fld-c3d4'] = 'new value'

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

doc['values']['fld-c3d4'] = 'new value'
...