Я намереваюсь использовать функцию 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
?