Реализация 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
, может вам лучше использовать этот вместо него (но уже устаревший, не рекомендуется)?