Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >pynamodb基于已有类对象创建模型

pynamodb基于已有类对象创建模型
EN

Stack Overflow用户
提问于 2020-01-14 00:03:22
回答 1查看 342关注 0票数 0

我正在Python Flask项目中使用pynamodb,并开始构建我的模型来定义将用于表的对象。

文档说明您可以按如下方式定义模型:

代码语言:javascript
运行
AI代码解释
复制
from pynamodb.models import Model
from pynamodb.attributes import UnicodeAttribute

    class UserModel(Model):
        """
        A DynamoDB User
        """
        class Meta:
            table_name = "dynamodb-user"
        email = UnicodeAttribute(null=True)
        first_name = UnicodeAttribute(range_key=True)
        last_name = UnicodeAttribute(hash_key=True)

但是,我已经在另一个模块中定义了一个已存在的类,如下所示:

代码语言:javascript
运行
AI代码解释
复制
class ActivityTask:
    def __init__(self,task_name, sequence_order):
        self.taskid = uuid.uuid4()
        self.taskcreated = datetime.datetime.now()
        self.taskname = task_name
        self.sequenceorder = sequence_order

有没有办法让我以某种方式“移植”我现有的ActivityTask类对象,以便我可以将其用作模型?因为它已经与所讨论的DynamoDB表的模式匹配。

EN

回答 1

Stack Overflow用户

发布于 2020-05-27 05:43:01

下面是我创建的一个类,用于从Marshmellow类自动生成Pynamodb模型:

代码语言:javascript
运行
AI代码解释
复制
class PynamodbModel:
def __init__(self, base_object):
    self.base_object = base_object

    attributes = self.make_attributes(self.base_object.schema)

    meta_attr = {"table_name" : self.base_object.__name__}

    attributes['Meta'] = type("Meta", (), meta_attr)

    self.table : Model = type("Table", (Model,), attributes)

def convert_attr(self, attr):
    if type(attr) == Nested:
        atttr = attr.inner.nested

def make_attributes(self, schema_obj):
    attributes = {}

    for name, elem in schema_obj._declared_fields.items():
        if name == 'id':
            attributes[name] = attibute_conversion[type(elem)](hash_key=True)
        elif type(elem) == List:
            if type(elem.inner) == Nested:
                attributes[name] = attibute_conversion[type(elem)](of=self.make_nested_attr(elem.inner.nested))
            else:
                attributes[name] = attibute_conversion[type(elem)]()

        elif type(elem) == Nested:
            attributes[name] = self.make_nested_attr(elem.nested)

        else:
            attributes[name] = attibute_conversion[type(elem)]()

    return attributes

def make_nested_attr(self, nested_schema):

    attributes = self.make_attributes(nested_schema)

    return type(nested_schema.__class__.__name__, (MapAttribute,), attributes)

Go here to see the full example !

基本上,我只是迭代Marshmellow Schema属性并分配相应的Pynamodb属性。希望它能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59725877

复制
相关文章
python之创建类的对象
  Python 是一门易于学习、功能强大的编程语言。它提供了高效的高级数据结构,还能简单有效地面向对象编程。Python 优雅的语法和动态类型以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。下面我们来介绍一下python的创建类的对象。
jiankang666
2022/12/05
6670
python之创建类的对象
类加载机制与对象的创建
查找并加载类的二进制数据加载时类加载过程的第一个阶段,在加载阶段,虚拟机需要完成以下三件事情:
leobhao
2022/06/28
7050
类加载机制与对象的创建
Python面向对象编程-类和对象-对象的创建和使用
在Python中,对象是一种数据结构,它封装了数据和行为,并允许对它们进行操作。对象是根据类定义的,它们具有类定义的属性和方法。本文将介绍如何在Python中创建和使用对象。
玖叁叁
2023/04/19
1.2K0
创建自定义类的对象数组
CN_Simo
2017/12/26
2.4K0
创建自定义类的对象数组
Java类加载及对象创建过程详解
验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害。如果验证失败,就会抛出一个java.lang.VerifyError异常或其子类异常。验证过程分为四个阶段:
全菜工程师小辉
2019/08/16
1.4K0
关于类的对象创建与初始化
今天,我们就来解决一个问题,一个类实例究竟要经过多少个步骤才能被创建出来,也就是下面这行代码的背后,JVM 做了哪些事情? Object obj = new Object(); 当虚拟机接受到一条 new 指令时,首先会拿指令后的参数,也就是我们类的符号引用,于方法区中进行检查,看是否该类已经被加载,如果没有则需要先进行该类的加载操作。 一旦该类已经被加载,那么虚拟机会根据类型信息在堆中分配该类对象所需要的内存空间,然后返回该对象在堆中的引用地址。 一般而言,虚拟机会在 new 指令执行结束后,显式调
Single
2018/04/17
8340
关于类的对象创建与初始化
如何在 Django 中创建抽象模型类?
Django 中的抽象模型类是一个模型,它用作其他模型继承的模板,而不是一个旨在创建或保存到数据库的模型。在应用程序中,可以使用抽象模型定义多个模型共享的相似字段和行为。使用 Django,您可以定义一个派生自 Django.db.models 的模型类,以建立一个抽象模型类。
很酷的站长
2023/08/11
4170
如何在 Django 中创建抽象模型类?
关于类的对象创建与初始化
今天,我们就来解决一个问题,一个类实例究竟要经过多少个步骤才能被创建出来,也就是下面这行代码的背后,JVM 做了哪些事情?
Single
2018/04/10
1.7K4
关于类的对象创建与初始化
优雅地创建未定义类PHP对象
在PHP中,如果没有事先准备好类,需要创建一个未定义类的对象,我们可以采用下面三种方式:
硬核项目经理
2019/11/21
2.9K0
SpringAop源码分析(基于注解)三:创建代理对象
我们先回到Bean初始化之后,调用BeanPostProcessor后置处理器的地方。
周同学
2019/10/24
4430
JavaScript面试卷(二) -- 复杂的创建对象模型
接着上一篇文章说,上一篇创建的对象没有向外部提供直接设置属性值的入口。都是在new 创建对象时,给定默认值。
用户7293182
2022/01/17
6290
JavaScript面试卷(二) -- 复杂的创建对象模型
详解C# 利用反射根据类名创建类的实例对象
“反射”其实就是利用程序集的元数据信息。反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间。
zls365
2021/01/13
3.2K0
类对象 与 类的对象
一、类对象 1.创建类对象 Class<?> class1 = Class.forName("d01_student.Student"); 2.类对象方法(反射) 2.1构造方法 Class<?> c
2020/10/23
1.1K0
Java 8 开始新增的 Optional 类 - 创建 Optional 对象
如果你想创建一个空的 Optional 的对象,我们简单的使用 Optional 类提供的 empty() 静态方法:
HoneyMoose
2022/05/17
6670
Java 8 开始新增的 Optional 类 - 创建 Optional 对象
AI小知识-基于模型的聚类
类算法的分类——基于模型的聚类(model-based methods)
用户3578099
2019/08/15
5860
类和对象的创建过程(元类,__new__,__init__,__call__)
一、 type() 1、创建类的两种方式 方式一 class MyClass(object): def func(self,name): print(name) myc = MyClass() print(MyClass, type(MyClass)) print(myc, type(myc)) 我们创建了一个名为MyClass的类,并实例化了这个类,得到其对象myc 上面代码打印的结果为: <class '__main__.MyClass'> <class 'type'>
用户1214487
2018/01/24
1.2K0
java类的初始化和对象的创建顺序
学习java编程思想--类的初始化p146 类的加载顺序 * 1加载器启动找到 xxx.class文件,通过extends关键字寻找基类,先加载基类 * 2类初始化先初始化static成员变量和static---> * 2先初始化父类的static成员变量和static * 3再初始化本类的static成员变量和static * 类加载之后,对象创建开始 * 1先加载父类的非静态成员变量(静态成员变量在类初始化的时候已经加载,非静态成员变量要随对象的创建而初始化) * 2先加载父类的构造函数 * 3再加
Ryan-Miao
2018/03/13
1K0
点击加载更多

相似问题

基于已有表的类/模型自动生成

11

如何在pynamodb中创建只读模型属性?

10

使用Pynamodb保存对象创建日期时间

11

对象创建基于基模型字段分配代理类

24

ruby对象模型+基于另一个类的类创建

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档