首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON表示PynamoDB实例

JSON表示PynamoDB实例
EN

Stack Overflow用户
提问于 2020-05-15 14:25:17
回答 3查看 3.5K关注 0票数 3

我在从PynamoDB实例获取JSON表示时遇到了问题。这是模型。

代码语言:javascript
复制
class MyTest(Model):
    """
    Model class representing the Golden table attributes.
    """

    class Meta:
        table_name = "my-test"

    # Query Fields
    Id = UnicodeAttribute(hash_key=True)
    SomeInfo = MapAttribute(default={})
    SomeInfo1 = UnicodeAttribute(null=True)
代码语言:javascript
复制
my_test = MyTest(Id='123', SomeInfo={}, SomeInfo1='testing')

我需要的是my_test的JSON表示。

我尝试过的事情是。

  1. my_test.to_dict() --这导致了一个非属性错误
  2. json.dumps(my_test.to_dict(),indent=2)

任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

发布于 2021-03-25 02:08:03

如果您希望从dict模型中获取一个pynamoDB,可以尝试使用attribute_values属性:

代码语言:javascript
复制
# Define the model
class Car(Model):
    class Meta:
        table_name = "cars"

    # Query Fields
    vin = UnicodeAttribute(hash_key=True)
    make = UnicodeAttribute(null=True)
    model = UnicodeAttribute(null=True)

# Create instance
new_car = Car("123F345", "Honda", "Civic")

# Read back the attributes
attrs = new_car.attribute_values // {"vin": "123F345", "make": "Honda", "model": "Civic"} 

attrs的结果将是简单的dict (<class 'dict'>)。

示例用例(只是为了说明):

代码语言:javascript
复制
// List of dict with the results of a scan of the whole Cars table
results = [car.attribute_values for Cars.scan()]   ​
票数 4
EN

Stack Overflow用户

发布于 2021-12-13 18:39:40

PynamoDB 最近增加 to_jsonfrom_json函数到Model对象。

但是,到目前为止,它有一些关于多态模型/属性的错误,从而阻止了正确的反序列化。

我确实有一个支持多态模型/属性的不同实施。这个更灵活一些,IMHO。

票数 1
EN

Stack Overflow用户

发布于 2020-10-08 01:32:06

因此,我遇到了同样的问题,唯一有效的方法就是将每个属性映射到它的特定类型,并相应地处理它:

代码语言:javascript
复制
def __iter__(self):
        for name, attr in self.get_attributes().items():
            if isinstance(attr, MapAttribute):
                if getattr(self, name):
                    yield name, getattr(self, name).as_dict()
            elif isinstance(attr, UTCDateTimeAttribute):
                if getattr(self, name):
                    yield name, attr.serialize(getattr(self, name))
            elif isinstance(attr, NumberAttribute):
                yield name, getattr(self, name)
            else:
                yield name, attr.serialize(getattr(self, name))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61821580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档