如何解决查询时烧瓶 SQL-Alchmey 不返回字典 模型 - 桶/bucket_db错误日志
我怀疑我的代码。找了几个小时,还是没弄明白。
这是一件非常简单的事情我正在尝试查询具有给定 ID 的表。然后我想用传递的名称更新“名称”属性。
但它给了我一个错误 - TypeError: 'Bucket' object does not support item assignment
。 it's like its not returning a dictionary
# PUT REQUEST
def put(self,id):
bucket_to_update = bucket_db.query.get(id) #### returns <Bucket id>,not dict
print(bucket_to_update) # prints the bucket as string
if not bucket_to_update:
return {"status": "failure"},404
args = BucketAPI.parser.parse_args()
name = args.get('name',None)
bucket_to_update['name'] = name # >>>>>>>>>>>>>>>>>>>> PRODUCES AN ERROR
db.session.commit()
return {"status" "success"},200
模型 - 桶/bucket_db
"""Bucket model"""
from todo_app import db
class Bucket(db.Model):
__tablename__ = 'buckets'
def __init__(self,name):
self.name = name
id = db.Column(
db.Integer,primary_key=True
)
name = db.Column(
db.Text,index=True,unique=True,nullable=False
)
items = db.relationship('Item',backref=db.backref('bucket',lazy='joined'),lazy=True)
def __repr__(self):
return '<bucket-{}> '.format(self.name)
从 docs 和 link 可以清楚地看出我们可以更新 details as dictionary
,但在这里它不起作用。
错误日志
bucket_to_update['name'] = name
TypeError: 'Bucket' object does not support item assignment
p.s- 我正在创建一个 Resource 类,以使用flask-restful 具有不同的创建/删除方法
更新(已解决)
正如评论和答案所指出的,它是一个对象而不是字典,您应该将它作为 bucket.name=name
访问。另外我回来的时候漏了一个冒号。
解决方法
我无法访问我的编码环境,但我认为如果您遵循它应该可以正常工作。
bucket_to_update.name = name
,
添加 (3) 在 def put(self,id):
的末尾,
将 return {"status" "success"},200
更正为 return {"status":"success"},200
(1) 在您的 class Bucket(db.Model):
中,您定义了初始化函数 __init__
,因此您覆盖了父类 db.Model
的初始化函数,因此父类的 __init__
函数将不被调用。
因此,尝试:
def __init__(self,name):
db.Model.__init__(self) ## *** invoke __init__ of the parent class
self.name = name
(2) 更新bucket_to_update
中的修改:
bucket_to_update['name'] = name # >>>>>>>>>>>>>>>>>>>> PRODUCES AN ERROR
db.session.commit()
在提交前添加db.session.add(bucket_to_update)
:
bucket_to_update['name'] = name # >>>>>>>>>>>>>>>>>>>> PRODUCES AN ERROR
db.session.add(bucket_to_update)
db.session.commit()
正在寻找您的评论。
祝你好运。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。