【问题标题】:Marshmallow dumps missing 1 required positional argument: 'obj'棉花糖转储缺少 1 个必需的位置参数:'obj'
【发布时间】:2021-08-27 07:29:15
【问题描述】:

由于某种原因,这段代码产生了下面的错误,我不知道为什么。据我所知,在我遵循的指南中,dump 的调用方式与谷歌搜索没有结果,尤其是因为这似乎是 json.dump/json.dumps 也可能产生的错误消息。任何帮助都将不胜感激。

from flask_marshmallow import fields
from app import db, ma



class Person(db.Model):
    __tablename__ = "person"
    person_id = db.Column(db.Integer, primary_key=True)
    # 1 to 1

    personal_nr = db.Column(db.Integer)
    usr_name = db.Column(db.String(32))
    first_name = db.Column(db.String(32))
    last_name = db.Column(db.String(32))
    birthday = db.Column(db.DateTime)

    person_type = db.Column(db.String(32))

    __mapper_args__ = {
        'polymorphic_identity': 'person',
        'polymorphic_on': person_type
    }


class PersonSchema(ma.Schema):
    class Meta:
        model = Person
        sqla_session = db.session


class User(Person):
    __tablename__ = "user"
    password_hash = db.Column(db.String(65))

    __mapper_args__ = {
        'polymorphic_identity': 'user',
    }


class UserSchema(PersonSchema):
    password_hash = fields.fields.String()


nutzer = User

nutzer.usr_name = 'testnutzer'
nutzer.password_hash = 'rfsedlujhnogiyefdgxrjuvbhklnrf'
nutzer.personal_nr = 1234
nutzer.first_name = 'fritz'
nutzer.last_name = 'müller'
nutzer_schema = UserSchema



def dumper():
    return nutzer_schema.dumps(nutzer)


dumper()

TypeError                                 Traceback (most recent call last)

<ipython-input-1-cf86950183fb> in <module>
     57 
     58 
---> 59 dumper()

<ipython-input-1-cf86950183fb> in dumper()
     54 
     55 def dumper():
---> 56     return nutzer_schema.dumps(nutzer)
     57 
     58 

TypeError: dumps() missing 1 required positional argument: 'obj'

如果使用 .dump 而不是 .dumps,则错误是相同的。不在 jupyter notebook 中时,错误仍然存​​在。

【问题讨论】:

    标签: python flask flask-sqlalchemy marshmallow flask-marshmallow


    【解决方案1】:

    我相信您忘记实例化用户对象和架构。将nutzer = User 替换为nutzer = User(),将nutzer_schema = UserSchema 替换为nutzer_schema = UserSchema()

    另外,建议将对象作为参数传递给函数:

    def dumper(obj):
        return nutzer_schema.dumps(obj)
    
    
    dumper(nutzer)
    

    【讨论】:

    • 非常感谢。我真的咬牙切齿,只是为了让它变得如此简单。还是谢谢你。
    猜你喜欢
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2017-03-27
    • 2019-11-12
    • 2019-12-23
    • 2021-02-01
    相关资源
    最近更新 更多