注意:这里我没有使用Flask SQLAlchemy,而是使用SQLAlchemy ORM
我在StackOverflow上看到几个答案,说这是一种更新记录的方法:
session.query(FoobarModel).get(foobar_id).update({'name': 'New Foobar Name!'})
但是我有个错误说:
AttributeError: 'FoobarModel' object has no attribute 'update'
不过,我可以这样更新:
foobar = session.query(FoobarModel).get(foobar_id)
foobar.name = 'New Foobar Name!'
session.commit()
session.flush()
所以我尝试了这样的方法(这样我就不必把所有的财产都写出来):
new_foobar = {'name': 'New Foobar Name!'}
old_foobar = session.query(FoobarModel).get(foobar_id)
for property in new_foobar:
old_foobar[property] = new_foobar[property]
session.commit()
session.flush()
但是我得到了这个错误:
TypeError: 'FoobarModel' object does not support item assignment
在做了一些挖掘之后,我发现这是因为即使这样也行不通:
print(old_foobar['name'])
从而引发错误:
TypeError: 'FoobarModel' object is not subscriptable
老实说,第一种语法在我看来是最好的,但我不能让它起作用。有什么想法吗?
我相信您正在为更新查询查找类似的内容:
由于
update()
属于Query,并且filter()
返回的是Query
对象,这将起作用,而不是试图对Query.get()
,see also here返回的FoobarModel
对象(它没有这样的函数)调用update()
。至于循环遍历属性并按名称分配属性,可以使用
setattr
和dict来完成,如下所示:这显然有点毫无意义,只有一个属性,但也许它会在某个时候派上用场。
相关问题 更多 >
编程相关推荐