Реализация hmset в python с использованием словаря-списка и вложенного словаря


Я пытался внедрить приведенный ниже код redis в приложение python django
hmset test_template:TEMPLATE_ID test_tags "[{\"key\":\"test_manual_entry_1\",\"value\":\"Some_value_1\"},{\"key\":\"test_manual_entry_2\",\"value\":\"Some_value_2\"}]"

Я пробовал функции hset и hmset, но обе выдают ошибку. Ниже приведен пример моего кода, который выглядит следующим образом

class RedisUtil:

    def hset(self, key_name, data):
        key_name = "test_template:TEMPLATE_ID"
        list_data = [{"key": "test_manual_entry_1", "value": "Some_value1"}, {"key": "test_manual_entry_2", "value": "Some_value2"}]
        data = {"test_tags": [json.dumps(d) for d in list_data]}  # output list: ['{"key": "test_manual_entry_1", "value": "Some_value1"}', '{"key": "test_manual_entry_2", "value": "Some_value2"}']

Я пробовал следующие методы для сохранения, но все методы выдают ошибку

# Method 1
self.redis_client.hset(key_name, data)  # Exception: redis.exceptions.DataError: Invalid input of type: 'dict'. Convert to a bytes, string, int or float first.

#Method 2
self.redis_client.hset(key_name, "test_tag", data["test_tags"])  # Exception: redis.exceptions.DataError: Invalid input of type: 'list'. Convert to a bytes, string, int or float first.

Также, я хотел бы добавить, что может быть случай, когда мой список будет пуст, это может быть краевой случай.

Заранее спасибо за любую помощь.

Вот документация Python Redis hset: https://redis.readthedocs.io/en/stable/commands.html?highlight=hset#redis.commands.core.CoreCommands.hset

Сигнатура функции - hset(name, key=None, value=None, mapping=None, items=None).

Для метода 1 вы передали data в качестве ключа. Кроме того, я предполагаю, что данные - это dict, который отличается от строки.

Для метода 2 вы используете data["test_tags"] в качестве значения, но все же data["test_tags"] - это не строка, а список.

Если вы хотите реализовать hmset, может вам лучше использовать этот вместо него (но уже устаревший, не рекомендуется)?

Вернуться на верх