Sqlalchemy использует json_set для обновления определенного поля JSON - PullRequest
0 голосов
/ 20 мая 2019

Я намереваюсь использовать функцию func для обновления определенного поля JSON в Sqlalchemy, но у меня возникает некоторая проблема, вот мой код для обновления поля:

self.db.query(TestModel).filter(TestModel.test_id == self._test_id).update(
    {field_name: func.json_set(
        field_name,
        "$." + key,
        formatted_val)}
    , synchronize_session='fetch'
)
self.db.commit()

Я запустил код выше и получилошибка:

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) malformed JSON

Итак, я иду, чтобы проверить журнал, обнаружил, что Sqlalchemy формирует SQL-предложение вроде этого:

UPDATE test_model SET field_name=json_set('field_name', '$.keyname', 'value') WHERE test_model.test_id = 1;

проблема в том, что Sqlalchemy не следует использовать 'field_name' дляДля конкретного поля следует использовать field_name, чтобы указать поле, и я пытаюсь запустить исправленное предложение sql ниже в клиенте sql:

UPDATE test_model SET field_name=json_set(field_name, '$.keyname', 'value') WHERE test_model.test_id = 1;

, и это работает найти

Я просто хочузнать, как заставить Sqlalchemy сформировать правильное поле от 'field_name' до field_name?

...