簡體   English   中英

在 DynamoDB 中處理數字的最佳實踐是什么(Python + boto3)

[英]What's the best practice for working with numbers in DynamoDB (Python + boto3)

問題
我知道 DynamoDB 正在為它保存的每個數字使用小數。 我正在將 python 與 boto3 一起使用,並且對於我放入表中的每個int - 它很容易將其轉換為 Decimal。 浮點數並非如此 - 當嘗試將浮點數放入表中時,boto3 會拋出 TypeError ( Float types are not supported. Use Decimal types instead. )。 反過來也會發生同樣的問題 - 當查詢表並返回值時,數字類型也將作為小數返回,這本身就是一個問題,因為小數不可序列化並且不能那么容易地轉換為 json(當我嘗試使用我的flask-restx應用程序返回響應,它無法序列化dict)。

我發現的無用解決方案
我在網上找到的更常見的解決方案之一是使用 3rd 方庫(如simplejson ),它可以序列化 Decimals 以將 dict 轉儲為字符串。 但我找不到真正的用途,因為我的應用程序應該返回一個 dict 而不是一個字符串。 我可以序列化然后反序列化,但這肯定是一個糟糕的解決方案。 我還看到了建議實現自定義編碼器的解決方案,但出於同樣的原因,它也無濟於事。

我在尋找什么
我有一個flask-restx應用程序,它接收帶有json主體的POST請求,我想按原樣保存在DynamoDB表中。 如果 boto3 可以在檢索數據時將數字解析為小數,反之亦然,那么它可能是完美的。 否則,也許實現一個在更新表項之前和從表中查詢數據之后運行的中間件可能是最好的解決方案。 為什么我在網上找不到針對這種常見問題的可靠解決方案? 我錯過了什么嗎?

**編輯**
關於這個問題的對話可以在 boto3 的 repo 中看到: https : //github.com/boto/boto3/issues/665
看起來,遺憾的是沒有任何好的解決方案。

我認為處理這個問題的最簡單方法是使用 ORM。 試試 Pynamo,看看它是否適合你: https : //github.com/pynamodb/PynamoDB

你可以這樣使用:

class TestModel(Model):
  class Meta:
    table_name = "TestModel"
  float1 = NumberAttribute(default=0)
  int1 = NumberAttribute(default=0)

暫無
暫無

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

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