[英]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.