> For the complete documentation index, see [llms.txt](https://docs.ncteam.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ncteam.io/nocodb/obnovlenie-dannykh-patch.md).

# Обновление данных (PATCH)

Из этой статьи вы узнаете, как изменять существующие записи в таблицах NocoDB с помощью PATCH-запросов из Smartbot Pro.

Перед началом работы настройте глобальные переменные **%NOCODB*****URL%**, **%NOCODB*****TABLE%** и **%NOCODB\_TOKEN%**, как описано в статье [Просмотр данных (GET)](https://docs.ncteam.io/nocodb/prosmotr-dannykh-get).

### Чем PATCH отличается от POST <a href="#patchpost" id="patchpost"></a>

| Метод | Назначение                                                                                                                  |
| ----- | --------------------------------------------------------------------------------------------------------------------------- |
| POST  | Создание **новой** записи. Поле **Id** не указываете — его выдаёт NocoDB.                                                   |
| PATCH | **Частичное обновление** существующей записи. В теле запроса обязательно указывается **Id** строки, которую нужно изменить. |

PATCH обновляет **только те поля**, которые вы передали в JSON. Остальные столбцы в строке остаются без изменений.

Формат запроса:

```
PATCH https://<вашдомен>/api/v2/tables/<идентификатортаблицы>/records
```

### Откуда взять Id записи <a href="#id" id="id"></a>

Чтобы обновить строку, нужно знать её **Id** (целое число в NocoDB по умолчанию).

**Варианты:**

1. Сохранить **Id** из ответа после POST в переменную сценария.
2. Выполнить GET с фильтром (`where`) и взять `Id` из первой подходящей записи в **%response\_data%**.
3. Посмотреть **Id** в интерфейсе NocoDB или в Swagger после тестового GET.

{% hint style="info" %}
Без корректного **Id** NocoDB не сможет понять, какую строку обновлять. Убедитесь, что **Id** — число (integer), а не строка в кавычках в логике SmartQuery, если тип поля в таблице — число.&#x20;
{% endhint %}

### Обновление одной записи <a href="#undefined" id="undefined"></a>

#### 1. Блок "Выполнить SmartQuery" <a href="#id-1smartquery" id="id-1smartquery"></a>

```json

%table% = "Database"

%url% = (
    %NOCODB_URL% 
    + %NOCODB_TABLE%[%table%] 
    + "/records"
    )

# Id строки — из GET или после POST
%record_id_to_patch% = 6

%req_body% = [
    {
        "Id": %record_id_to_patch%,
        "First_name": "Александр",
        "Phone_number": "79992345678"
    }
]
```

<figure><img src="https://1945201336-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FadGXspCXfuLDmMvBstfI%2Fuploads%2Fq68ZmrRZYs2znwEdp9EP%2Fimage.png?alt=media&amp;token=d8e99139-d1f8-4471-9d51-89935cec046c" alt=""><figcaption></figcaption></figure>

#### 2. Блок "Отправить HTTP-запрос" <a href="#id-2http" id="id-2http"></a>

* **URL**: `%url%`
* **Метод**: `PATCH`
* **Тело запроса**: тип **"Текст"**: `{{ %req_body% | to_json }}`
* **Заголовки:**

| Ключ         | Значение           |
| ------------ | ------------------ |
| accept       | `application/json` |
| xc-token     | `%NOCODB_TOKEN%`   |
| content-type | `application/json` |

* **Ответ** — в переменную типа "Словарь" (или массив, если ваш сценарий так настроен).
* **Статус** — в переменную типа "Число".

<figure><img src="https://1945201336-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FadGXspCXfuLDmMvBstfI%2Fuploads%2FgA3jCoEofVoSZiihW5vx%2Fimage.png?alt=media&amp;token=bdf1be45-e777-4e66-a3f9-348e070dba7f" alt=""><figcaption></figcaption></figure>

#### 3. Ожидаемый результат <a href="#id-3" id="id-3"></a>

При успехе придет статус **200,** а значение строки изменится.

Таблица до изменения:

<figure><img src="https://1945201336-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FadGXspCXfuLDmMvBstfI%2Fuploads%2Fv41wR9CG7T8ULQjxtDXC%2Fimage.png?alt=media&amp;token=2ed4de2a-3d84-4f2c-a795-460af41b3a12" alt=""><figcaption></figcaption></figure>

После:

<figure><img src="https://1945201336-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FadGXspCXfuLDmMvBstfI%2Fuploads%2FS9TTL7HDEif15LLSvtOD%2Fimage.png?alt=media&amp;token=12b0f1f2-1602-41c3-a8f4-69090681b90f" alt=""><figcaption></figcaption></figure>

### Обновление нескольких записей за один запрос <a href="#undefined" id="undefined"></a>

В **%req\_body%** передайте массив объектов — у каждого должен быть свой **Id** и набор полей для изменения.

```

%table% = "Database"

%url% = (
    %NOCODB_URL% 
    + %NOCODB_TABLE%[%table%] 
    + "/records"
    )

%req_body% = [
    { "Id": 5, "City": "Рязань" },
    { "Id": 6, "City": "Пермь", "Last_name": "Иванов" }
]
```

### Поля, которые нельзя менять через PATCH <a href="#patch" id="patch"></a>

Следующие типы полей в NocoDB  присваиваются автоматически и доступны только для чтения. Их передача в теле запроса может быть проигнорирована или привести к ошибке:

* **Created At**
* **Updated At**
* **Id**

Если PATCH возвращает ошибку, проверьте, не пытаетесь ли вы записать в такое поле.
