簡體   English   中英

AttributeError: 'dict' object 沒有屬性

[英]AttributeError: 'dict' object has no attribute

我正在嘗試使用 sqlalchemy 和棉花糖來制作 PUT 端點來更新 model 中的一些數據。 我遇到了這個錯誤:

  File "/Users/ronak.patel/MLGit/pythonAPI/applications.py", line 129, in update
    update.applicationId = application_id
AttributeError: 'dict' object has no attribute 'applicationId'

這可以追溯到這段代碼:

    if update_application is not None:

        # turn the passed in application into a db object
        schema = ApplicationSchema()
        update = schema.load(body, session=db.session)

        # Set the id to the application we want to update
        update.applicationId = application_id

        # merge the new object into the old and commit it to the db
        db.session.merge(update)
        db.session.commit()

        # return updated application in the response
        data = schema.dump(update_application)

        return data, 200

特別是這部分: update.applicationId = application_id

我的ApplicationSchema model 看起來像這樣:

class Application(db.Model):
    __tablename__ = "application"

    applicationId           = db.Column(db.Integer, primary_key=True)
    applicantId             = db.Column(db.Integer, db.ForeignKey('applicant.applicantId'))
    channel                 = db.Column(db.String(80), nullable=True)
    type                    = db.Column(db.String(80), nullable=True)
    offerId                 = db.Column(db.String(80), nullable=True)
    ipAddress               = db.Column(db.String(80), nullable=True)
    neuroIdIdentifier       = db.Column(db.String(80), nullable=True)
    threatmetrixSessionId   = db.Column(db.String(80), nullable=True)
    applicationAgreements   = db.Column(db.String(80), nullable=True)
    cardholderAgreements    = db.Column(db.String(80), nullable=True)
    electronicCommunication = db.Column(db.String(80), nullable=True)
    privacyPolicy           = db.Column(db.String(80), nullable=True)
    termsOfService          = db.Column(db.String(80), nullable=True)
    disclosureHtml          = db.Column(db.String(80), nullable=True)
    reviewPageHtml          = db.Column(db.String(80), nullable=True)
    status                  = db.Column(db.String(80), default='processing', nullable=True)
    timestamp               = db.Column(
        db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow
    )
    
class ApplicationSchema(SQLAlchemyAutoSchema):
    class Meta:
        model = Application
        include_relationships = True   

其中有applicationId ...所以我有點困惑為什么它告訴我AttributeError: 'dict' object has no attribute 'applicationId'

根據marshmallow-sqlalchemy docs ,您似乎需要將load_instance Meta class 屬性設置為True 正如 G. Anderson 所建議的,您可以嘗試打印update對象的類型以進行確認,但您似乎得到了一個默認dict作為反序列化數據,而不是您的Application model 的實例,這可以通過執行上述操作來實現——提到的把戲。 代碼可以這樣寫:

class ApplicationSchema(SQLAlchemyAutoSchema):
    class Meta:
        model = Application
        include_relationships = True
        load_instance = True

暫無
暫無

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

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