簡體   English   中英

Python 語法 / REDIS

[英]Python Syntax / REDIS

在 Linux 上為 REDIS 使用內置的 redis-cli 時,我可以毫無問題地輸入以下命令

redis-cli -p 6379 mset SWSUIT "{\"D0:\": {\"install\": {\"rules\": [[0.62, -0.34], [-0.00, 4.95], [0.00, 0.00, 0.18]], \"name\": \"DO\", \"slows\": [[[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"type\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]]], \"suit\": [0, 1, 1, 1], \"test\": [1.0, 1.0, 1.0, 1.0]}, \"pal\": [100.0, 100.0, 100.0, 100.0], \"alto\": [0.0, 0.0, 0.0, 0.0]}}"

    r.mset('SWSUIT', '"{\"D0:\": {\"install\": {\"rules\": [[0.62, -0.34], [-0.00, 4.95], [0.00, 0.00, 0.18]], \"name\": \"DO\", \"slows\": [[[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"type\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]]], \"suit\": [0, 1, 1, 1], \"test\": [1.0, 1.0, 1.0, 1.0]}, \"pal\": [100.0, 100.0, 100.0, 100.0], \"alto\": [0.0, 0.0, 0.0, 0.0]}}"
')

在 python 腳本中使用 redis-py 輸入此值時,我無法使其工作。 我不斷收到錯誤消息,提示我必須插入 kwal 或字典。 我假設這是因為 python 對引號和反斜杠的解釋不同。 有什么方法可以在不更改值的情況下執行命令? 它必須完全按照上面看到的格式進行格式化。 我也嘗試過 os 包來執行命令。

os.system('redis-cli -p 6379 mset SWSUIT "{\"D0:\": {\"install\": {\"rules\": [[0.62, -0.34], [-0.00, 4.95], [0.00, 0.00, 0.18]], \"name\": \"DO\", \"slows\": [[[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"type\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]]], \"suit\": [0, 1, 1, 1], \"test\": [1.0, 1.0, 1.0, 1.0]}, \"pal\": [100.0, 100.0, 100.0, 100.0], \"alto\": [0.0, 0.0, 0.0, 0.0]}}"

')

哪種有效,但將值輸入到格式不正確的 REDIS 中

謝謝你。

這與 JSON 字符串的格式無關。 您返回的錯誤表明您向函數傳遞了錯誤的參數。 redis-pymset調用需要關鍵字參數或 Python 字典作為輸入。 Redis 中的MSET命令用於在單個操作中設置多個鍵的值,因此 Python API 期望這兩種形式之一將 Redis 鍵映射到它們的值。 如果您將代碼更改為以下內容:

myDict = { 'SWSUIT': '"{\"D0:\": {\"install\": {\"rules\": [[0.62, -0.34], [-0.00, 4.95], [0.00, 0.00, 0.18]], \"name\": \"DO\", \"slows\": [[[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"type\": \"c\", \"gfx\": 0, \"N\": 4}]], [[{\"bit\": \"p\", \"order\": 1, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"p\", \"order\": 2, \"gfx\": 0, \"N\": 4}], [{\"bit\": \"c\", \"gfx\": 0, \"N\": 4}]]], \"suit\": [0, 1, 1, 1], \"test\": [1.0, 1.0, 1.0, 1.0]}, \"pal\": [100.0, 100.0, 100.0, 100.0], \"alto\": [0.0, 0.0, 0.0, 0.0]}}"' }
r.mset(myDict)

你會得到你想要的結果。 鑒於您只想設置一種數據類型, set方法將是更好的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM