首页 > 解决方案 > Flask sqlalchemy 连续更新多个字段

问题描述

最近从 expressjs 搬到了烧瓶。我正在创建一个烧瓶应用程序flask flask-sqlalchemy flask-wtf

这是一个形式繁重的应用程序。我预计会有大约 30-50 个表格,每个表格有 20-100 个字段。

客户端表单正在使用flask-wtf

我能够创建模型并能够创建 crud 功能。问题是每个表格我都必须手动完成

在创建 [...]

# after validation
someItem = SomeModel(someField1=form.someField1.data, ..., somefieldN = form.someFieldN.data)
db.session.add(someItem) 
db.session.commit() 

更新中

[....]
queryItem = SomeModel.query.filter_by(id=item_id)
queryItem.somefield1 = form.someField1.data
[...]
queryItem.somefieldN = form.someFieldN.data

db.session.commit() 

显然,有很多表格,它变得非常乏味。有没有办法如果你能建议一个图书馆来做这件事,我已经在网上搜索了几个小时。我最接近的是创建一个字典,然后像传递它一样

someDict = {'someField1': form.someField1.data, ....}
SomeModel.query.filter_by(id=item.id).update(someDict)

如您所见,它同样乏味

我希望找到一种方法将表单数据直接传递SomeModel给创建和更新。我以前使用过 expressjs + knex,我只是能够在验证后将 req.body 传递给 knex。

谢谢你的时间

标签: python-3.xflaskflask-sqlalchemy

解决方案


使用“populate_obj”(注意:模型字段名称必须与表单字段匹配)

创建记录:

someItem = SomeModel()
form.populate_obj(someItem)
db.session.add(someItem)
db.session.commit()

更新记录:

queryItem = SomeModel.query.filter_by(id=item_id)
form.populate_obj(queryItem)
db.session.commit()

推荐阅读